1. 程式人生 > >C語言中前置++和後置++的區別

C語言中前置++和後置++的區別

直接上程式碼

#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);

輸出的卻是已經變了的aa現在是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值

這就是區別