SDRAM 메모리

포인터(pointer 변수)에 대한 이해

망고토마토 2024. 2. 16. 21:33
반응형

포인터를 지역함수에 넘길 때 여러가지 상황에 대해 정리해보았다. 

 

1. 지역함수에서 변수값이 변경이 되는가? 

 

 

2. 포인터를 이용하여 지역함수 안에서 변수 값을 변경하는 상황

 

 

3. 1차 포인터로는 지역함수 안에서 생성된 heap 영역 메모리에 접근이 불가능한 상황, 이중 포인터를 사용해야 하는 이유

\

위 상황에서 많이 착각하는 것이 있다.

set_memory라는 지역 함수에

무언가 주소를 넘겨주면, 그 주소값에 메모리가 할당 될 것이라는 느낌이다. 

포인터는 주소라는 고정된 생각 때문에 이런 생각이 강하게 든다. 

set_memory라는 지역 함수에 넘겨주는 것은

         int◐의 주소를 넘긴 것이다.!!!!

                   포인터 변수 r의 주소가 아니다.

                               int◐의 주소를 넘긴 것이다. 

set_memory 지역함수에서 

                생성된 포인터 p는  int◐의 주소를 받지만,

                              결국에는 malloc 함수를 통해 배정된 int ☎를 가리킨다(int ☎의 주소를 가진다).

                                            그리고 set_memory  함수 종료시 포인터 p는 삭제 된다. 

따라서

main 함수의 포인터 r이 

set_memory 함수의 포인터 p가 가리키는 것을 전혀 알 길이 없다. 

 

그래서  set_memory 지역함수에 int◐의 주소를 넘기는 것이 아니라, 포인터 변수 r의 주소를 넘겨야 한다.

     이중(**) 포인터가 필요하다. !!

4. 이중(**) 포인터로 지역함수 안에서 생성된 heap 영역 메모리에 접근하자.

반응형