C語言中前置++和後置++的區別
阿新 • • 發佈:2019-02-04
直接上程式碼
#include <stdio.h>
int main(int argc, char* argv[])
{
int a = 6;
printf("%d\n",a++); //輸出為6,返回的是暫存器的值,而不是加後的值
printf("%d\n",a); //輸出為7,
printf("%d\n",++a); //輸出為8;
return 0;
}
在C語言中:
a++ 表示取a的地址,把它的值裝入暫存器,然後增加記憶體中a的值;
所以在這個程式碼中,輸出還是沒變的a
等於6
printf("%d\n",a++);
而下一個
printf("%d\n",a);
輸出的卻是已經變了的a
,a
現在是7了
要解釋這個問題,首先我們要明白這個CPU的執行原理
CPU執行具有指令週期
當電腦執行這一步命令a++
的時候,電腦先將記憶體中a(6)的值放入暫存器中,然後將記憶體中的值+1,雖然最終暫存器中的a值是要和記憶體中的a值保持同步的,但是現在這一步指令執行完printf的時候,也只是printf了暫存器中的a值
下一步輸出a值的時候
printf("%d\n",a);
CPU這時候開始更新暫存器中的a值,將記憶體中的a值傳入暫存器中
然後這是打印出來的就是7了
而++a 表示取a地址,增加它的內容,然後把值放在暫存器中
注意,這個時候a值已經增加了才放進去暫存器的,a++是先放進去暫存器再在記憶體中增加a值
這就是區別