函式呼叫引數為指標時,實參跟形參的問題
阿新 • • 發佈:2019-01-02
#include<stdio.h>
void change(int *p){
int val = 5;
printf("%p\n", p);
*p = val;
printf("%p\n", p);
p = &val;
printf("%p\n", p);
}
int main(){
int val = 4;
int *p = &val;
change(p);
printf("%d\n", *p);
printf("%p\n", p);
return 0;
}
執行結果:
0x7fffdb8192a4
0x7fffdb8192a4
0x7fffdb81928c
5
0x7fffdb8192a4
可以看出,實參跟形參是兩個不同的指標,只不過進入函式時,實參跟形參都指向main函式中的val地址,
當改變形參指向的變數的值時,*p = val; main函式中的val被改變;
但是改變形參的指向地址時,p = &val; 只是改變了形參的指向,並沒有改變實參的指向;
當加上const之後:
void change(const int *p){
int val = 5;
printf("%p\n", p);
/**p = val;
printf("%p\n", p);*/ //去掉註釋將發生read-only錯誤
p = &val;
printf("%p\n", p);
}
執行結果:
0x7fff85402a94
0x7fff85402a7c
4
0x7fff85402a94
可以看出加上const之後,不能改變形參所指向的變數的值,但是可以改變形參的指向;
其實加上const就是說實參所指向的變數的值是隻讀的,形參不能改變;