c++ - c语言指针运算问题
迷茫
迷茫 2017-04-17 14:00:01
0
8
359

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?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(8)
巴扎黑

p++
++在後
等價於

*(p)=10;
p++

不同於++p

黄舟

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

黄舟

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

小葫芦

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

Peter_Zhu

雷雷

Peter_Zhu

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

左手右手慢动作

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

Ty80

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板