我創建了一個函式來回傳指標,如下所示:
int* function(int cc){
int* p;
p=&cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(a));
return 0;
}
控制臺日志如下所示:
value for *p1 = 10
value for *function 10
pointer p1 = 0x16d4bb1f8
pointer function= 0x16d4bb1dc
我真的不明白為什么兩個指標可以顯示相同的值,但是它們存盤的地址卻不同。
uj5u.com熱心網友回復:
您在函式中傳遞的變數是作為引數完成的(普通變數而不是指標)。如果你真的想要它應該像你期望的那樣作業,那么你應該傳遞指標而不是普通的 int 區域變數。
進行以下更改:
int* function(int *cc){
int* p;
p=cc;
return p;
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
printf("value for *p1 = %d\r\n",*p1);
printf("value for *function %d\r\n", *function(&a));
printf("pointer p1 = %p\r\n", p1);
printf("pointer function= %p\r\n", function(&a));
return 0;
}
此代碼有效并顯示您期望的輸出......我們這樣做是因為我們不希望將變數的新副本傳遞給函式。我們想要相同的地址,所以我們應該在函式中傳遞變數地址。
uj5u.com熱心網友回復:
做這個
void function(int cc){
int* p;
p=&cc;
cc = 42; // just for fun
printf("value of cc inside function %d\r\n", cc);
printf("value of &cc %p\r\n", &cc);
}
int main(){
int a;
int *p1;
a=10;
p1=&a;
function(a);
printf("value for *p1 = %d\r\n",*p1);
printf("pointer p1 = %p\r\n", p1);
return 0;
}
您會看到 cc 是 a 的副本,如果您在“function”中更改它的值,它不會更改“a”。您已經找到了 c 的“按值呼叫”語意。這意味著變數作為副本傳遞給函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480156.html
