程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-C語言指針移動後指向問題

c語言-C語言指針移動後指向問題

編輯:編程綜合問答
C語言指針移動後指向問題

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...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved