인프런 커뮤니티 질문&답변

jungdabin8님의 프로필 이미지
jungdabin8

작성한 질문수

홍정모의 따라하며 배우는 C언어

9.14 포인터와 코딩 스타일

포인터 초기화 질문

작성

·

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 의 강의들을 잠시 복습해보셔도 도움이 많이 되실 것 같습니다.

jungdabin8님의 프로필 이미지
jungdabin8

작성한 질문수

질문하기