搜尋

首頁  >  問答  >  主體

c++ - c语言指针运算问题

c 指针运算问题?修改
一、代码:

int a[]={1,2,3,4,5};
int *p;
p=a;
*(p++)=10;
int i;
for (i=0; i<sizeof(a)/sizeof(int); i++) {
printf("a[%d]=%d\n",i,a[i]);
}

输出:
a[0]=10
a[1]=2
a[2]=3
a[3]=4
a[4]=5
二、问题
明明指针往下移了,为什么a[0]=10,而不是a[1]=10?

迷茫迷茫2773 天前360

全部回覆(8)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 14:02:01

    p++
    ++在後
    等價於

    *(p)=10;
    p++

    不同於++p

    回覆
    0
  • 黄舟

    黄舟2017-04-17 14:02:01

    (p++)=10 中(p++)回傳的是0的下標,所以結果就是這樣的。其實你這句等價於p++,結果是一樣的

    回覆
    0
  • 黄舟

    黄舟2017-04-17 14:02:01

    p++會傳回未自增前的值,並且在表達式求值階段結束p才會自加,這裡*p++可以看作是子表達式。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:02:01

    p++ 不熟練就少用,節省不了多少開銷,簡單的一個先運算後賦值和先賦值後運算的問題。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:02:01

    雷雷

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:02:01

    p++和p是一模一樣的,++p才等於(p+1),但不管怎樣,這兩個東西存在以後後面的程式碼中p=p+1。 (如果還不懂,自己翻書)

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 14:02:01

    有個簡單的方法便於你理解:你可以依序列印p、p++((p++)取的還是p++這個標量值,或者此處你可以輸出&((p++)) )、p三者的值,看了結果就懂了*(p++)記憶體的位址還是p,之後才變成p+1

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:02:01

    「前綴++」與「後綴++」的區別,c/c++中經典考題

    回覆
    0
  • 取消回覆