C_C++

포인터의 포인터 - swap함수의 호출

bluedevil77 2010. 11. 26. 20:02
case1 - 효과 없는swap 함수의 호출 (Call By Value)

/* ptr_swap1.c */
#include <stdio.h>

void pswap(int *p1, int *p2);

int main(void)
{
int A=10, B=20;
int *pA, *pB;

pA=&A, pB=&B;
// 함수 호출 전 
printf("pA가 가리키는 변수 : %d \n", *pA);
printf("pB가 가리키는 변수 : %d \n", *pB);

pswap(pA, pB);

//함수 호출 후
printf("pA가 가리키는 변수 : %d \n", *pA);
printf("pB가 가리키는 변수 : %d \n", *pB);

return 0;
}

void pswap(int *p1, int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

결과


----------------------------------------------------------------------

case2 - 더블 포인터 입장에서의 swap (Call By Reference)

/* ptr_swap2.c */
#include <stdio.h>

void pswap(int **p1, int **p2);

int main(void)
{
int A=10, B=20;
int *pA, *pB;

pA=&A, pB=&B;
// 함수 호출 전 
printf("pA가 가리키는 변수 : %d \n", *pA);
printf("pB가 가리키는 변수 : %d \n", *pB);

pswap(&pA, &pB);

//함수 호출 후
printf("pA가 가리키는 변수 : %d \n", *pA);
printf("pB가 가리키는 변수 : %d \n", *pB);

return 0;
}

void pswap(int **p1, int **p2)
{
int *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}


결과