printf和cout右向左求值

2021-06-28 13:20:49 字數 720 閱讀 5565

(*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 這樣的函式,其作用是將字元放回到...