작성
·
156
·
수정됨
1
안녕하세요 질문 사항이 있습니다.
포인터 변수를 초기화 할 때, 특정 주소값으로 초기화를 할 수도 있나요?
예시)
보통의 경우 int *p = null이라고 한다면, int *p = 0x10000000 처럼 특정 주소로 초기화가 가능한가요? 그래서 printf("%d", &p);로 0x10000000번지의 값을 출력할 수가 있을까요?
만약 없다면, 특정 주소에 담긴 값을 읽어오는 방법이 있을까요?
답변 1
1
안녕하세요? 질문&답변 도우미 Soobak 입니다.
포인터 변수를 특정 주소값으로 초기화하는 것은 기술적으로 가능하지만, 실제 응용 프로그램에서는 권장되지 않습니다. (특정 분야 제외)
예시 )
int *p = (int *)0x10000000; // 특정 주소를 가리키는 포인터를 초기화
if (p != NULL)
printf("%d", *p); // 그 주소에 저장된 값을 출력
또한, 해당 메모리 주소가 유효한 메모리 주소인지, 혹은 해당 메모리 영역에 접근할 권한이 있는지 등은 프로그램의 실행 환경에 따라서 달라지게 됩니다.
이에 대해서는, 0x00000000
과 같은 형식의 메모리 주소는 '가상 메모리' 이며, 이를 실제 메모리 주소(물리 메모리 주소)와 매핑하고 관리하는 것은 운영체제가 담당한다는 점,
따라서 위와 같은 접근은 예기치 못한 행동이나 오류가 발생할 수도 있다는 점 또한 알아두시면 학습에 도움이 되실 것 같습니다.
때문에, 대부분의 응용 프로그램에서는 포인터를 특정 메모리 주소로 초기화할 이유가 없고, 대신, malloc()
, calloc()
과 같은 메모리 할당 함수를 사용하여 동적으로 메모리를 할당하고, 이 주소를 포인터에 저장하여 사용합니다.
메모리와 관련된 내용은 강의 12.1 메모리 레이아웃 훑어보기 에서 보다 자세하게 학습하시게 되며,
공부에 재미가 생기셨을 때 섹션 0 의 강의들을 잠시 복습해보셔도 도움이 많이 되실 것 같습니다.