포인터를 지역함수에 넘길 때 여러가지 상황에 대해 정리해보았다.
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 영역 메모리에 접근하자.
'SDRAM 메모리' 카테고리의 다른 글
Little endian, int32, uint32에 대한 이해 (0) | 2024.02.21 |
---|---|
포인터(pointer 변수)에 대한 이해 -2 (0) | 2024.02.18 |
64비트 데이터 라인을 가진 DDR4 RAM의 저장공간과 주소 (0) | 2023.02.24 |
FPGA와 SDRAM 메모리의 연결 (0) | 2022.12.15 |