繁体   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