#include <stdio.h>
C언어로 포인터의 필요성 설명(콜바이 벨류)
void swap( int val1, int val2) //swap 메소드 선언
{
printf("tmp val1=%d , val2=%d \n", val1,val2 ); //tmp val1=10진수 정수, val2=10진수 정수◆
int tmp;
tmp = val1; //tmp, val1, val2가 서로 맞물리면서 교환한다.
val1 = val2;
val2 = tmp;
printf("tmp val1=%d , val2=%d \n", val1,val2 ); ◆
}
int main(int argc , char * argv[])
{
int a, b;
a =1 ;
b = 2;
printf("a=%d , b=%d \n", a,b ); //a=1, b=1 확인 ◆
swap(a,b);
printf("a=%d , b=%d \n", a,b ); ◆
return 0;
}
------출력----------------------------------------------------------------------------------
a=1 , b=2 ◆
tmp val1=1 , val2=2 ◆
tmp val1=2 , val2=1 ◆
a=1 , b=2 ◆
다시 정리하자면
변수가 4개 선언되는데 a,b 그리고 val1, val2
a,b에 가각 1,2를 넣고, 이걸 swap메소드로 갖고와서 연산후에는
swap메소드안의 val1,val2는 증발해버린다.
그럼 결국 원래의 a,b의 1,2값에는 변화가 없다.
===================================================================
콜바이 레퍼런스 (포인터)
#include <stdio.h>
{
printf("tmp val1=%d , val2=%d \n", *val1,*val2 ); //◆
int tmp;
tmp = *val1; //가리키고있는 변수의 값
*val1 = *val2;
*val2 = tmp;
printf("tmp val1=%d , val2=%d \n", *val1,*val2 ); //◆
}
int main(int argc , char * argv[])
{
int a, b;
a =1 ;
b = 2;
printf("a=%d , b=%d \n", a,b ); //◆
swap(&a,&b); //a의 주소값, b의 주소값
printf("a=%d , b=%d \n", a,b ); //◆
return 0;
}
-------출력---------------------------------------------------------------------------------------------
a=1 , b=2 //◆
tmp val1=1 , val2=2 //◆
tmp val1=2 , val2=1 //◆
a=2 , b=1//◆
===================================================================
#include <stdio.h>
int main(int argc , char * argv[])
{
int *p;
int a = 2;
p = &a;
printf("%p %p \n" , p, &a);
printf("%d %d \n" , *p, a);
a =3 ;
printf("%d %d \n" , *p, a);
return 0;
}
0xbff6b118 0xbff6b118
2 2
3 3