(*p)++等價於*p=*p+1也就是b的值變成3
函式的壓棧順序是從右到左的:
當(*p)++入棧時,編譯器做了如下操作
先為(*p)++建立乙個臨時變數_b,並做賦值操作,_b=(*p)++
可想而知此時_b的值是(*p)也就是2,賦值後*p做了自增操作*p=*p+1
所以在printf("%d %d\n",*p,(*p)++)中的*p入棧時*p已經變成了3
如果printf("%d %d\n",*p,(*p)++)換成printf("%d %d\n",*p,++(*p))
結果將是3,3原理同上分析
在c語言裡*p++,*(p++)所做的操作是一樣的,先去*p的值然後指標p再自增。而(*p)++則是先取*p的值,然後*p=*p+1。
#includeusing namespace std;
void main()
{ int i=2;
cout<
printf從右向左計算,從左向右列印
include int main printf d,d n x,x 函式,從右向左計算,然後從左向右輸出。首先計算x 取出x的值,此時x等於0,這個0留給printf語句輸出之用。然後執行x x 1 這時x 等於1 輸出時,從左向右輸出,先輸出1,再輸出0。最後x的值為1。int ptr arr p...
printf和cout的執行緒安全問題
總結一下csdn上面的乙個帖子。cql23 提出乙個問題,請看下面的例子。include include using namespace std const unsigned int size 10 const unsigned int pcount 3 const unsigned int cco...
cout和printf的混用而產生的順序問題
之前對於cout與printf 混用的結果的認識,源於某年北京賽區某judge的總結。據其稱,某隊在比賽時某題的輸出混用了cout與printf 結果輸出的順序出錯。其把原因歸結為乙個帶緩衝而乙個不帶緩衝。對此金強提出了置疑,因為stdio.h中定義了像ungetc 這樣的函式,其作用是將字元放回到...