C언어에서 함수는 함수 인자를 받게 된다.

int sum(int a, int b)
	int c = a + b;
	return c;
}

라는 함수는 int a와 int b가 생성되며 인자를 받게 된다.

여기서 중요한 점은 a와 b가 바뀌어도 입력받게된 인자는 변하지 않는다.

우리는 포인터를 이용해 값에 의한 호출이 아닌 참조에 의한 호출을 할 수 있다.

즉 a와 b를 포인터 형식으로 받게 되면 함수의 인자가 주소로 되므로 주소의 값을 바꾸면 함수의 밖에 있는 변수도 값이 바뀌게 된다.

아래 예제를 보자

#include<stdio.h>
void swap(int *px, int *py); 
int main(void) {
	int a = 100, b = 200;
	printf("a=%d b=%d\n", a, b);
	swap(&a, &b); //주소를 입력받는다
	printf("a=%d b=%d\n", a, b);
}
void swap(int *px, int *py) { //px py 선언, px py는 a,b의 주소의 값을 가지고 있음
	int tmp;
	printf("\n%d %d	px와 py가 가지고 있는 주소 \n", px, py);
	printf("\n%d %d	px와 py의 주소를 참조한 값 %d %d\n", *px, *py);
	printf("x=%d y=%d\n", *px, *py);
	tmp = *px;
	*px = *py;
	*py = tmp;
	printf("x=%d y=%d\n", *px, *py);
}

void swap은 (int *px, int *py)를 매개 변수로 갖게 되고 이 변수에는 &a &b가 들어간다

int *px,*py;

px=&a;

py=&b;

가 된다.

*px=&a가 아님에 주의하라 포인터 변수에는 주소가 저장된다!

카테고리:

업데이트: