const int num = 10;
const int* num = &val1;
num = &another;
같이) *num같이 num을 통한 값변경은 불가하다.int* const num = &val2;
*포인터 num에 들어갈 주소값 변경이 불가하다. *num을 통한 값변경은 가능하다.
const int* const num = &val3;
크게 4가지로 메모리공간을 나눌 수 있다.
1. Code : 실제 코드 text를 담고 있는 공간
2. Data : 전역변수, 정적 변수등 컴파일시 할당되는 데이터를 담고 있는 공간
3. Stack : 지역변수, 매개변수, 함수 호출 등 런타임시 할당되는 데이터 담고 있는 공간
4. Heap : 사용자가 동적으로 데이터를 저장하는 공간 (malloc, new 등으로)
함수 호출 시 매개변수를 값으로 받으면 함수 호출이 끝나고 변경사항이 없어진다.
참조로 매개변수를 받으면 값복사가 아닌 주소를 통해 값을 변경하므로 호출이 끝나고도 변경사항을 유지할 수 있다.
call by value :
void MyFunc(int num);
call by Reference :void MyFunc(int *num);