흥달쌤 깨알 C언어 정리 4강, 5강, 6강
제 4강 변수의 종류와 유효범위
1) 지역변수
- 함수/블록 안에서 선언하는 변수
- 함수/블록의 종료와 함께 메모리상에서 소멸
- 초기값이 없으면 쓰레기 값이 들어감
- 스택 영역에 저장됨
void main(){ // 메인 블럭
if(1){
int num1 = 10; // 지역 변수 선언
printf("%d", num1); // 10 출력
} // num1 사라짐
printf("%d", num1); // num1 없으니 오류
}
2) 전역변수
- 함수 블록 밖에서 선언하며 전체 함수에 영향을 미친다
- 프로그램이 종료될 때 메모리상에서 소멸
- 초기값이 없으면 0값이 들어감
- 데이터 영역에 저장됨
int num1; // 전역변수 num1 선언
void main(){
num1 = 10;
printf("%d", num1); // 10 출력
func();
printf("%d", num1); // 20 출력
} // 10 20
void func(){
num1 = 20;
}
3) 정적변수
- static으로 선언하며 선언된 블록 내에서만 사용가능
- 함수가 종료되어도 소멸되지 않고, 값이 그대로 유지됨
- 프로그램이 종료될 때 메모리상에서 소멸
- 초기값이 없으면 0이 입력되고, 단 한번만 초기화
- 데이터 영역에 저장됨
void main(){
add(10); // sum: 10
add(5); // sum: 15 <- static으로 10이 저장되어 있기 때문에 거기에 i값을 더해 준다
add(3); // sum: 18 <- 15 + 3
}
int add(int i){
static int sum = 0;
sum = sum + i;
printf("sum: %d\n", sum);
}
4) 동적변수
- 메모리 동적할당으로 생성되는 변수
- Run time 시간에 메모리를 할당
- 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적
- 무조건 포인터를 사용해야 함
- 힙 영역에 저장됨
제 5강 산술연산자
1. 산술연산자 종류
1) 이항 연산자
+, -, *, /, %
2) 단항 연산자
++, --
전위 연산자/후위 연산자
3) 대입 연산자
=, +=, -=, *= /= %=
[문1] 3 / 4
[답1] 0
[문2] a = 10; b = a++; c = ++a;
[답2] a: 12, b: 10, c: 12
[문3] a = 10; a+= 10;
[답3] a: 20
제 6강 연산자 우선순위
1) 산술연산자 종류
1. ()
2. ++, --, ~, !
3. +, -
4. <<, >>
5. <. <=, >, >=
6. ==, !=
7. &, ^, |
8. &&, ||
9. =, +=, -=, *= /= %=