void change _ prt();
main()
{
int * prt,b[3] = {1,2,3};
prt = b;
change _ prt(prt);
printf("%d\n", * prt);
}
void change _ prt(p)
int * p;
{ p+=2;
}
為什麼結果是1,而不是3?
謝謝。
你這代碼一堆錯誤,能編譯通過?
void change_prt(int ** p);
int main()
{
int *prt,b[3] = {1,2,3};
prt = b;
change_prt(&prt);
printf("%d\n", * prt);
return 0;
}
void change_prt(int **p)
{
p+=2;
}
至於結果為什麼不是3
指針可以通過修改它指向的內容
但是你這裡是修改指針本身的值(如32位機子下,指針是32位的地址,你只是修改了地址值而不是該指針指向的內存)
在這裡來說指針值只是個值傳遞,會拷貝臨時變量的,所以對參數p來說,p的值沒有改變
但是
void change _ prt(int * p)
int * p;
{
*p = 10; // p的值也是沒有改變的,只是改變了它指向的內存,以前的內存值1,現在是10
}
我修改後的代碼,就是把該b頭元素地址也昨晚一個指針。
就比如,你有一個文件F,在其他地方生成一個快捷方式S1,你用S1打開文件修改內容並保存,
在原始文件列表再打開F,看到的是修改後的內容
現在的參數就相當於這個快捷方式S1傳進去,生成一個臨時變量S2,你在其中修改S2指向的路徑,那跟S1完全沒有關系
(S1快捷方式還是指向你的文件F)
不知道是否明白。
修改後的代碼,就是再F,S1,在加一個快捷方式SS1指向S1...