/* 눈 돌아가는 예제. 포인터가 가리키는 변수를 서로 바꾼다. */
#include <stdio.h>
int pswap(int** pa, int** pb);
int main() {
int a = 1;
int b = 2;
int* pa, * pb;
pa = &a;//pa는 a의 주소값
pb = &b;//pb는 b의 주소값
printf("pa 가 가리키는 변수의 주소값 : %p \n", pa);
printf("pa 의 주소값 : %p \n \n", &pa);
printf("pb 가 가리키는 변수의 주소값 : %p \n", pb);
printf("pb 의 주소값 : %p \n", &pb);
printf(" ------------- 호출 -------------- \n");
pswap(&pa, &pb);//a의 주소값의 주소값, b의 주소값에 주소값 대입.
printf(" ------------- 호출끝 -------------- \n");
printf("pa 가 가리키는 변수의 주소값 : %p \n", pa);
printf("pa 의 주소값 : %p \n \n", &pa);
printf("pb 가 가리키는 변수의 주소값 : %p \n", pb);
printf("pb 의 주소값 : %p \n", &pb);
return 0;
}
int pswap(int** ppa, int** ppb) {
int* temp = *ppa;//포인터는 ppa의 주소값을 가리킨다.즉 &pa이다.
printf("ppa 가 가리키는 변수의 주소값 : %p \n", ppa);//ppa는a의 주소값의 주소값이다.
printf("ppb 가 가리키는 변수의 주소값 : %p \n", ppb);//ppb는 b의 주소값의 주소값이다.
printf("**ppa:%d\n", **ppa);
*ppa = *ppb;//*ppa와 *ppb는 a와 b의 주소값이다.
*ppb = temp;
return 0;
}
여기서 생긴 궁금증: 함수(int**ppa)에서는 ppa는 포인터의 포인터이다.
함수(int *ppa)에서는 ppa는 배열이다.
자 그러면 뭔가 이상하지 않은가?
왜 ppa가 그냥 포인터인 경우는 없는 걸까?
처음에 엄청 헤맸던게 왜 함수 (int *ppa)에서 ppa가 포인터가 아니냐는 거 였다. 궁금증을 해결해보고싶다.
이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.
728x90
'초기 네이버 기록 > 과거 공부 기록' 카테고리의 다른 글
다시 천천히 -씹어먹는 C언어 에라토스테네스의 체 예제 + 계산기 예제 (0) | 2023.01.07 |
---|---|
배운것 기록 + 유클리드 호제법 문제 (씹어먹는 C언어) (2) | 2023.01.07 |
씹어먹는 C언어 함수 공부 저장 (3) | 2023.01.07 |
오래 걸린 문제(성적 순 배열 및 막대 그래프 출력 문제)(씹어먹는C언어) (0) | 2023.01.07 |
(흔적)코딩 공부 기록 switch문과 배열 (씹어먹는 C언어 정답) (0) | 2023.01.07 |