C語言中 p p 是如何工作的?

時間 2021-05-31 04:00:49

1樓:劉博

拒絕回答好了……

不要在乙個語句中多次修改同一變數的值……

P大某雙學位期末考試出過請寫出f(a++,a++)的值,也是一臉懵逼,不過那門課現在已經消失了……

2樓:Doraemon

我比較討厭自加、自減運算子和別的別的運算子或者判斷句同時出現,因為這樣根本搞不清參與運算的到底是自加減前的還是自加減後的,可讀性變差。自加減運算子置前的還情有可原,置後的那是絕不能忍。

包括但不限於以下幾種型別:

a = b++;

if (i++ == 10) ...

while (*s++) ...

*p++ = *q++;

3樓:赫連勃勃

建議題主閱讀一下 c陷阱與缺陷這本書,其中3.7節有這樣的話:

」c語言中只有四個運算子(&&、‖、?:和 ,)存在規定的求值順序」

……」c語言中其他所有運算子對其運算元的求值順序是未定義的。特別的,賦值運算子並不能保證任何求值順序」

最後,題主要區分好求值順序和運算子優先順序還不是一回事。

4樓:pench3r

本著好奇的心態,在linux下嘗試反彙編看看組合語言是如何處理的:

上圖是執行到將array陣列的位址傳入 ptr 為([ebp-0xc])

接下來為核心的操作 *ptr++ = *ptr

首先<+51>: 將 ptr ( [ebp-0xc] )的中的位址(為array的首位址)儲存到 eax 中

然後<+54> -> <+ 57>: 進行 ptr+1 的操作,並將結果位址通過 edx 最終儲存到了 ptr ( [ebp-0xc] 此時儲存的為array[1]的位址).

最後 <+60> -> <+65>: 將array[1]的內容寫入到array[0]中。

最終總結為:

此結論只針對Linux下的gcc和g++環境

tmp = ptr;

ptr = ptr + 1;

*tmp = *ptr;

5樓:

有好多人都不建議這樣寫,,,身為小白的我也覺得如此,關鍵是在學C時K&R那本書偏偏又好多語句都類似與題主這樣的額,可能自己水平太淺emmmm

6樓:NJU好源氏

這種東西的感覺就是void f(int , int),然後你呼叫了乙個f(++a,++a);或者反過來

實際上感覺都是看編譯器的心情的

上述例子我記得在VS和VC6.0裡跑的結果都不一樣

C語言中的字串是如何儲存漢字的?

這東西應該和具體的環境有關。在VisualStudio預設情況下,是GBK編碼,兩個位元組存乙個漢字,因此如果引用不慎會造成亂碼。include intmain 輸出 c4 e3 ba c3 編碼 你 c4e3 好 bac3 printf s s 輸出 你好 注 程式正常操作 printf s s ...

請問 C 語言中 和 的用法?

記住 有3個用途 1.乘號 Multiply 2 3 就是6 2.宣告指標 Pointer Statement int a 5 int ptr a 就是宣告變數a是5,把a的位址附到指標ptr上 3.解引用 Dereference ptr 單獨拿出來就是找出 ptr指標指向的值,按照第二點的說法就是...

C語言中小數是如何儲存的?望大神指點?

Tux ZZ 在絕大多數程式語言中,小數都是按照IEEE754二進位制浮點規則儲存。二進位制IEEE754浮點轉換成十進位制的通用公式是 十進位制 1 符號位 0b1.尾數 2 指數 0x3ff 雙精度浮點型占用64bit空間,排布是這樣的 第63位 最左邊 是符號位,0表示正,1表示負。第62 5...