강의

멘토링

로드맵

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

앙기모띠님의 프로필 이미지
앙기모띠

작성한 질문수

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

6.7 포인터의 기본적인 사용법

포인터

작성

·

483

0

int *ptr_x  = &x;

int *px = &x;

이 두가지가 같은 뜻인가요?

직접 확인해봤는데

주소값이 저장하고 실행할 때마다 계속 바뀌어서

헷갈립니다ㅜㅜ

그리고 저장하고 실행할 때마다

주소값도 계속 바뀌는 건지도 궁금합니다..

퀴즈

여러 개의 동일 자료형 데이터를 효율적으로 관리하기 위한 방법은 무엇일까요?

개별 변수 사용

배열 활용

상수 선언

포인터만 사용

답변 3

3

joy님의 답변에 부연을 드리자면, 

아래의 두 식은 변수의 이름만 다를 뿐 저장하는 값은 x의 주소값으로 동일합니다.

int *ptr_x  = &x;

int *px = &x;

그리고 실행할 때마다 주소값이 달라지는 이유에 대해 좀 더 자세히 설명드리자면, 

아시다시피 모든 프로그램들은 실행되기 위해 메모리에 적재(저장)되어 있어야 합니다.

질문자님께서 반복적으로 같은 프로그램을 실행한다는 말은 '프로그램이 반복적으로 메모리에 적재된다'는 말과 같습니다.

이 때, 새롭게 실행되기 위한 주소가 매번 같은 주소가 아닐 수 있습니다. 다시 말해, 실행할 때마다 다른 위치에 프로그램이 적재될 수 있지요.

실행할 때마다 프로그램이 적재된 위치(주소)가 달라지기 때문에, 포인터 또한 실행할 때마다 달라지는 것입니다.

감사합니다

2

저도 처음에 포인터를 배울 때 잘 이해가 안돼서 힘들었던 기억이 나네요.

int*도 하나의 자료형(type)이고, int* x 에서 x는 하나의 변수(variable)입니다.

int와 double은 서로 자료형이 다르다는 것을 확실히 알 수 있죠?
비슷하게 접근하면 됩니다.
int와 int* 두 가지 자료형이 있는 것입니다.

int x 에서 x는 정수형 자료를 저장하는 변수고, 그 값은 1, 2, 3 등 을 나타냅니다.
int* x의 경우 x는 정수형 자료를 저장하는 변수를 가리키는 포인터 변수고,  가리키는 변수의 주소가 값입니다.

그렇다면 포인터 변수도 주소를 가지고  있다. 라는 말이 이해가 되실까요?
이걸 이해할 수 있다면 잘 이해하고 계신겁니다.

하신 질문을 이렇게 바꿔보는 것도 재밌는 일이 되겠네요.

double ptr_x = 1;
double px = 1;

두 가지가 같은 뜻인가요?
 => 두 변수의 이름이 다릅니다.

1

안녕하세요

int *ptr_x  = &x;

int *px = &x;

위 두식은 포인터명이 ptr_x , px 로 다르다는 것 정도 외에는 같은 뜻으로 볼 수 있습니다.

(x 의 주소를 저장하는 int 포인터)

실행을 새롭게 할 때마다 주소가 원래 바뀝니다! 

메모리 관리는 운영체제가 하며 x 의 주소값이 무엇일지는 실행할 때마다 다릅니다. 

앙기모띠님의 프로필 이미지
앙기모띠

작성한 질문수

질문하기