*변수의 범위 : 지역 변수의 경우 자기가 만들어진 함수에서만 생존 가능
*변수의 생존시간 : 지역변수는 그 지역을 벗어나면 메모리에서 사라짐. 전역변수는 프로그램이 끝날 때까지 생존.
-> 단, static 변수는 지역을 벗어나도 프로그램이 끝날 때까지 메모리 값을 가지고 있음. 그러나 범위는 자기가 만들어진 함수에서만 사용이 가능함. (즉, 범위는 지역변수지만 생존시간은 전역변수와 같음)
*변수의 연결 : a파일에 있는 변수를 b파일에서 사용하고 싶을 때 extern을 이용하면 가능함. (단, main함수는 단 하나여야 함, 지역변수는 가져올 수 없고 전역 변수와 전역 함수만 가능하다. 또 static가 붙은 함수와 변수는 사용할 수 없다.)
*전역 변수 만드는 법 : int main 바깥에 써서 전역 변수를 만든다. 이 변수는 main 함수에서도 사용 가능하고, 사용자 정의 함수들에서도 사용이 가능함. (그런데 한 번 오류가 나면 모든 코드가 다 잘못 돼서 꼭 필요할 때만 사용해야함. 편리하긴 함) 또한, 전역변수 a와 지역변수 a를 동시에 (이름이 같도록) 만들면, 코드는 지역변수 a를 사용하니 이름이 충돌하지 않도록 해야한다. 또한 전역변수는 초기화 시켜주지 않아도 0으로 초기화 된다. (지역변수는 초기화 안 해주면 쓰레기 값이 들어감)
*상식 (for문에서 선언한 int는 반복문 안의 지역변수이므로 반복문을 빠져나와서 i를 출력하려고 하면 오류가 난다)
*변수 값을 저장할 때는 RAM에 저장됨. 하지만 register 변수는 메모리가 아닌 cpu 안에 있는 메모리 안에 저장됨(하지만 이 저장공간은 작아서 많이 쓰지는 않음) 참고로 RAM은 저장을 하기 위한 공간이고, register은 연산을 하기 위한 공간이다.
*매개변수가 많을 때는 처음만 변수로 지정해주고 ...을 써도 된다. 하지만 c는 va라는 함수를 쭉 써야 하기 때문에 불편해서 잘 사용하지 않고, 파이썬에서는 이런 걸 쓰지 않아도 돼서 종종 쓰는 방법이다.
#include<stdio.h>
#include<stdarg.h>
int sum(int, ...);
int main(void)
{
int answer = sum(4, 4, 3, 2, 1);
printf("합은%d입니다.\n", answer);
return(0);
}
int sum(int num, ...) //매개변수가 많을 때는 이렇게 쓴다. ...은 argptr에 들어간다. 근데 뭐 va이런 걸 써야 해서 줠라 귀찮음.
{
intanswer = 0;
va_listargptr;
va_start(argptr, num);
for (; num > 0; num--)
answer += va_arg(argptr, int);
va_end(argptr);
return(answer);
}
'C언어' 카테고리의 다른 글
6주차 복습 (0) | 2023.10.10 |
---|---|
컴프 6주차 1차시 (0) | 2023.10.07 |
[JAVA] 3주차 (0) | 2023.09.18 |
3주차 복습 (0) | 2023.09.16 |
2021 학기말고사 (0) | 2023.09.11 |