본문 바로가기

C/C++

(MEMO) 포인터와 변수참조


먼저 Func 함수의 리턴값과 관련한건 신경안써도된다....
Func 함수만 보면 된다.
(메인에서 리턴받아서 따로 연산안함. 여기서는 Func함수만 다룬다)
 

int
& Func(int &ref) { int adress1; adress1 = (int)&ref; //adress1은 ref의 주소값을 받는다. printf("ref = %d \n", ref); printf("adress1(ref의주소): %d \n" , adress1); printf("&adress1(adress변수 자체의 주소) : %d\n ", &adress1); printf("*(int*)adress1 : %d\n\n", *(int*)(adress1) ); return adress1; } void main() { int val1 = 10; int &val2= Func(val1); }


먼저 이 함수는 ref의 주소값을 받았다. (Call by Reference)
1. main()함수에서 함수인자로 val1의 변수를 직접적으로 보내주었고, 함수는 이 인자의 주소를 가져온다.
2. adress1 변수(정수형) 는 ref의 주소값을 가져온다. (adress1 == &val1)
3. &adress1 는 ref와 관계없이 adress1 변수가 할당된 메모리 주소를 출력한다.

4. adress1이 가지고있는 주소값으로 바로 접근해서 해당주소가 가지고있는 값을 출력하고 싶었다.
 - > 먼저 1차적으로 adress1의 값은 ref의 주소값이다. 여기서는 출력값을 참고하자면 1375220 이 되겠다. 여기서는 단지 정수값 그 자체일뿐,,
 - > 2차적으로 (int*) 형으로 형변환하면 이 값을 포인터 int형으로 형변환 한다. 
        . 출력해보면 역시 값은 같다.....printf("%d", (int*)adress1 );  의 값은 역시 1375220 이 나온다.
 - > 3차적으로 이 주소가 가르키는 * 값을 찾는다. printf("%d", *(int*)adress1); 아래와 같이 10이 나온다.



  

'C/C++' 카테고리의 다른 글

MFC 메모리릭 잡기  (0) 2012.12.09
Server 프로그램 기본소스 분석  (0) 2012.06.17