포인터 (Pointer)
다른 변수의 주소를 그 값으로 가지는 변수이다.
번지를 알아내는 연산자 &를 사용해서 p에 c의 번지를 기억시키는 방법이다.
&연산자는 메모리의 변수나 배열에만 사용할 수 있고, 문자이나 상수 등에는 사용할 수 없다.
*연산자는 그 포인터가 가리키고 있는 변수나 배열변수의 값을 알려준다.
C에서 호출할 때 매개변수는 그 값만 전달되므로(call by value) 호출된 함수에서 호출한 함수의 변수값을 바꾸는 것은 불가능하다. 이를 가능하게 하는 것이 포인터이다.
다른 변수의 주소를 그 값으로 가지는 변수이다.
번지를 알아내는 연산자 &를 사용해서 p에 c의 번지를 기억시키는 방법이다.
p = &c
&연산자는 메모리의 변수나 배열에만 사용할 수 있고, 문자이나 상수 등에는 사용할 수 없다.
*연산자는 그 포인터가 가리키고 있는 변수나 배열변수의 값을 알려준다.
#include <stdio.h>
/* pointer test */
main()
{
int x = 1, y = 2, z[10];
int *ip; // 정수형 데이터의 포인터 선언
ip = &x;
printf( "ip= %d\n", ip ); // x의 메모리 주소 할당
y = *ip;
printf( "y= %d\n", y ); // *ip 와 x 는 같다.
*ip = 0;
printf( "*ip= %d\n", *ip ); // *ip 와 x 는 같다.
ip = &z[0];
printf( "ip= %d\n", ip ); // z[0]의 메모리 주소 할당
}
/* pointer test */
main()
{
int x = 1, y = 2, z[10];
int *ip; // 정수형 데이터의 포인터 선언
ip = &x;
printf( "ip= %d\n", ip ); // x의 메모리 주소 할당
y = *ip;
printf( "y= %d\n", y ); // *ip 와 x 는 같다.
*ip = 0;
printf( "*ip= %d\n", *ip ); // *ip 와 x 는 같다.
ip = &z[0];
printf( "ip= %d\n", ip ); // z[0]의 메모리 주소 할당
}
// output
ip= -1345986788
y= 1
*ip= 0
ip= -1345986828
ip= -1345986788
y= 1
*ip= 0
ip= -1345986828
C에서 호출할 때 매개변수는 그 값만 전달되므로(call by value) 호출된 함수에서 호출한 함수의 변수값을 바꾸는 것은 불가능하다. 이를 가능하게 하는 것이 포인터이다.
swap(&a, &b);
void swap( int *px, int *py ) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
void swap( int *px, int *py ) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,