CS/C

20240105 C - 변수

싹난 감자 2024. 1. 5. 12:03

 

#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