title: “C언어 포인터와 함수” categories:

  • C

    #C언어 포인터와 함수 : 네이버 블로그

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

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

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

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

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

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

아래 예제를 보자

#include
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가 아님에 주의하라 포인터 변수에는 주소가 저장된다!

업데이트: