簡體   English   中英

C中的后增量運算符

[英]Post-increment operator in C

我編寫這個C代碼時,我隨便編碼:

#include <stdio.h>
int main()
{
    int i;
    i = 10;
    printf("i : %d\n",i);
    printf("sizeof(i++) is: %d\n",sizeof(i++));
    printf("i : %d\n",i);
    return 0;
}

當我運行代碼時,我得到的結果是,

i : 10
sizeof(i++) is: 4
i : 10

我對這個結果感到困惑,因為我預計i ++內的sizeof運算符會增加i。 但似乎沒有。 因此,出於好奇,我寫了以下程序:

#include <stdio.h>
int  add(int i)
{
    int a = i + 2;
    return 4;
}
int main()
{
    int i;
    i = 10;
    printf("i : %d\n",i);
    printf("sizeof(i++) is: %d\n",add(i++));
    printf("i : %d\n",i);
    return 0;
}

對於這個程序,輸出是:

i : 10
sizeof(i++) is: 4
i : 11

現在我越來越困惑了。

對不起,如果這是一個noob問題(我是)但我真的不明白甚至如何谷歌這樣的問題!

為什么這兩個程序中i的值不同? 請幫忙!

sizeof()不是運行時函數。 它只是給出變量的大小或函數返回值的大小。

所以在第一個例子中,你只是將一個后增量運算符的結果值的大小放在一個整數... 4個字節的整數上。

在您的示例中,您只是打印返回4的方法的返回值,然后變量遞增,並打印11。

sizeof不評估其操作數(VLA類型情況除外)。

這意味着sizeof(*(T*)(NULL))sizeof(T)相同,完全有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM