c언어 입문자 포인터 관련 질문이 있습니다.

22.06.19 19:48 작성 조회수 87

0

int main()

{

            int num1 = 10;

            int num2 = 15;

            int temp =0;

 

            int *ptr1 =&num1;

            int *ptr2=&num2;

 

            temp = ptr1;

            ptr1= ptr2;

           ptr2 = temp;

 

            printf(" *ptr1 : %d , *ptr2 : %d,",  *ptr1, *ptr2);

}

 

ptr1이 가리키는 변수와

 ptr2가 가리키는 변수를 서로 바꿔

 

ptr2는 num1을 가리키고, ptr1은 num2를 가리키게 하는 함수를 만들어보았습니다.

 

물론

ptr1 = &num2;

ptr2 = &num1; 이렇게 하는 간단한 방식도 있다는 걸 알지만, 어쩌다가 저 부분에 궁금증이 생겼는데,

위와같이 temp를 그냥 int temp = 0; 으로 선언하면 컴파일이 제대로 이루어지지 않지만,

int *temp; 와 같이 포인터 변수로 선언하면, 문제 없이 작동하는 걸 확인하였습니다.

 

저는 포인터 변수를 선언하면, *ptr이라는 변수가

ptr에는 가리키는 변수의 주소가 상수로 저장이 되고,

*ptr은 ptr이라는 변수에 상수로 저장된 주소에 접근하는 일종의 연산이라고 생각하였기에,

ptr에 저장된 상수(주소값)을 int 형으로 선언된 일반 변수(temp)에 저장하고, 그것을 다시 다른 변수(ptr2)에 옮겨도 문제가 없을 것이라고 생각했는데, 

temp라는 일반 변수에서는 오류가 발생하고,

*temp라는 포인터 변수에 저장을 해야만 제대로 작동하는 것을 확인하였는데

 

왜 *temp로 선언해야만 제대로 작동하는 지 이유가 궁금합니다..!

답변 1

답변을 작성해보세요.

0

서범석님의 프로필

서범석

2022.06.20

언어 컴파일러를 c++용으로 사용하고 계신가요?