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