#include <stdio.h>
#define MAX_VAL 100
// 100이라는 숫자를 MAX_VAL이라는 이름으로도 사용할 수 있도록 '선언'
// 치환
// 디버깅할때 안보임 그냥 숫자로 보임 그냥 const 변수 만들어서 쓰는게 나을 수도 있다 그런데 얘는 리터럴 상수라서 case에 쓸 수 있다
// 전역변수(Global Variables)
// C나 C++에서만 유효
int g_var;
// main 밖에 만들었기 때문에 다른 함수에서도 접근 가능
// 프로그램 시작될 때 메모리에 올라가고 끝날 때 내려간다
void ChangeVariavle() {
//var = 100;
g_var = 100;
}
int main() {
// f9 브레이킹포인트 f10 한줄한줄 디버그 진행
// 변수(Variables)
// 변수 선언(Declaration)
// 초기화(Initicalzation)
// 쓰레기 값(Garbage Value)
// 변수가 할당받은 메모리에 어떤 값이 들어있을지 모름. 초기화 안되어있음 => 쓰레기값 들어있음
// int var = 0; <- 초기화 제일빠름
// int var;
// var = 0; <- 초기화x 0 대입
int var = 10;
printf("1. var: %d (%p)\n", var, &var);
// 변수의 지역성 변수의 사용 범위 {} 중괄호로 기준
//
{
int var = 5;
printf("2. var: %d (%p)\n", var, &var);
}
printf("3. var: %d (%p)\n", var, &var);
// 상수(Constant)
const int constVar = 0; // 초기화 필수 나중에는 못바꾸니까.. '상수화 변수'
//constVar = 10; 변경 안됨
// 리터럴 상수(Literal Constant)
//100 = 9; '상수'
// enum도 리터럴 상수
// l-value(Locator Value) 지역성을 가진 값. 변수
// r-value(Value of an expression) 식에 의해서 만들어진 값. 내가 정의하지 않았는데 발생하는 값, 저장 위치를 지정하지 않은 값
int val1 = 4, val2 = 10;
//val1 + val2 = 100;
//switch case에 case에는 리터럴 상수만 사용 가능 '상수화 변수' 안됨
return 0;
}
변수(Variables)
변수 선언(Declaration)
초기화(Initicalzation)
쓰레기 값(Garbage Value)
변수가 할당받은 메모리에 어떤 값이 들어있을지 모름. 초기화 안되어있음 => 쓰레기값 들어있음
int var = 0; <- 초기화 제일빠름
int var;
var = 0; <- 초기화x 0을 대입
변수의 지역성
변수의 사용 범위는 {} 중괄호로 기준
메모리에서 변수를 사용하고 난 뒤에 메모리 반납. 중괄호로 지역이 나뉨, 지역을 기준으로 변수 생성과 반납 인식
변수를 stack에 저장, 지역이 바뀌면 (새 데이터가 들어오면, 새 변수가 생기면) 해당 데이터를 먼저 사용.
stack (후입선출) 에 저장하기 때문에 변수에 접근 할 때 접근 우선 순위가 발생
- 데이터를 꺼낼 때 같은 지역에서 만든 데이터를 구분해서 꺼내고 저장하고 사용. -> 1 지역에서 2 지역의 변수에 접근 할 수 없음
전역 변수
int g_var;
함수 밖에서 생성, 모든 함수에서 접근 가능
'CS > C' 카테고리의 다른 글
20240105 C - 반복문 (1) | 2024.01.08 |
---|---|
20240108 C - 함수 (0) | 2024.01.08 |
20240104 C - 조건문 (1) | 2024.01.05 |
20240103 C - 연산자 (1) | 2024.01.03 |
20240102 C - 데이터 타입 (1) | 2024.01.02 |