2012-03-22 49 views
2

在這個C代碼中,我嘗試將一個變量的指針地址分配給其他變量,然後再返回。地址分配中的問題

#include<stdio.h> 
void change(int *x) 
{ 
    int *z; 
    z=x+5; 
    printf("%u\n",z); 
    x=z; 
    printf("%u\n",x); 
} 
int main() 
{ 
    int *p; 
    int y=2; 
    p=&y; 
    printf("%u\n",p); 
    change(p); 
    printf("%u\n",p); 
    return 0; 
} 

輸出是:

2280640 
2280660 
2280660 
2280640 

有人可以請解釋爲什麼是輸出2280640.的最後一行,我認爲它應該是2280660.

回答

7

你傳入指針按價值。指針p的副本被傳遞給函數change(),而不是指針p本身。

爲了能夠修改p函數內部,您必須通過通過引用

void change(int **x) 

,並把它作爲

change(&p); 

和內部change做作業作爲

*x = z; 
+0

添加到什麼阿爾斯提到...你會那麼需要取消對它的引用裏面' void change(int ** x)'像這樣:'z = * x + 5;'和'* x = z;'。 – 2012-03-22 04:52:55