🎯 값 인자 vs 주소 인자
void change(int i){
i = 10;
}
void main(){
int a = 5;
change(a);
printf("%d",a);
}
함수가 시행되면 지역 변수 i가 10으로 변경되고, 함수가 종료되면 해당 함수의 지역 변수에 할당된 메모리 공간 해제되면서 변수 i는 유효하지 않는다. change 함수는 main 함수에 전혀 영향 미치지 못함!
void change(int *i){
*i = 10;
}
void main(){
int a = 5;
change(&a);
printf("%d",a);
}
함수가 시행되면 간접참조를 통해서 i가 가리키는 변수, 즉 main의 a에 영향을 끼친다.
위를 call by value 와 call by reference라고 한다.
🎯 주소 인자
void change(int *i){
*i = 10;
}
void main(){
int a = 5;
int *pa = &a;
change(pa);
printf("%d",a);
}
swap 함수 만들어 보시오~
🎯 배열 인자 다시 보기
void init(int x[]) {
x[0] = x[1] = 0;
}
void main(){
int ar[2] = {-2,4};
init(ar);
printf("%d %d,ar[0],ar[1]);
}
한줄요약: int x[] 는 배열이 아니라 포인터
즉, void init( int x[]) == void init (int *x) 완전 동일
배열 포인터를 달라고 해서 저렇게 쓴거임
🎯 주소 반환
int *next_addr(int *p){
return p+1;
}
void main() {
int ar[5] = {2,1,3,0,4};
int *pl;
pl = next_addr(&ar[1]);
printf("%d",*pl);
}
smaller 함수
smaller(&ar[1],&ar[3]);
🎯 포인터 배열
void main() {
int a=1,b=2,c=3;
int *pi[3];
pi[0] = &a;
pi[1] = &b;
pi[2] = &c;
*pi[0] = -100;
printf("%d",a);
}