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]=10a[1]=2a[2]=3a[3]=4a[4]=5二、问题明明指针往下移了,为什么a[0]=10,而不是a[1]=10?
业精于勤,荒于嬉;行成于思,毁于随。
p++++在後等價於
p++
++
*(p)=10; p++
不同於++p
++p
(p++)=10 中(p++)回傳的是0的下標,所以結果就是這樣的。其實你這句等價於p++,結果是一樣的
p++會傳回未自增前的值,並且在表達式求值階段結束p才會自加,這裡*p++可以看作是子表達式。
*p++
p++ 不熟練就少用,節省不了多少開銷,簡單的一個先運算後賦值和先賦值後運算的問題。
雷雷
p++和p是一模一樣的,++p才等於(p+1),但不管怎樣,這兩個東西存在以後後面的程式碼中p=p+1。 (如果還不懂,自己翻書)
有個簡單的方法便於你理解:你可以依序列印p、p++((p++)取的還是p++這個標量值,或者此處你可以輸出&((p++)) )、p三者的值,看了結果就懂了*(p++)記憶體的位址還是p,之後才變成p+1
「前綴++」與「後綴++」的區別,c/c++中經典考題
p++
++
在後等價於
不同於
++p
(p++)=10 中(p++)回傳的是0的下標,所以結果就是這樣的。其實你這句等價於p++,結果是一樣的
p++
會傳回未自增前的值,並且在表達式求值階段結束p才會自加,這裡*p++
可以看作是子表達式。p++ 不熟練就少用,節省不了多少開銷,簡單的一個先運算後賦值和先賦值後運算的問題。
雷雷
p++和p是一模一樣的,++p才等於(p+1),但不管怎樣,這兩個東西存在以後後面的程式碼中p=p+1。 (如果還不懂,自己翻書)
有個簡單的方法便於你理解:你可以依序列印p、p++((p++)取的還是p++這個標量值,或者此處你可以輸出&((p++)) )、p三者的值,看了結果就懂了*(p++)記憶體的位址還是p,之後才變成p+1
「前綴++」與「後綴++」的區別,c/c++中經典考題