猿问

为什么(x+)不增加x?

为什么(x+)不增加x?

下面是在dev c+windows中编译的代码:

#include <stdio.h>int main() {
    int x = 5;
    printf("%d and ", sizeof(x++)); // note 1
    printf("%d\n", x); // note 2
    return 0;}

我希望x执行后为6岁附注1..然而,产出是:

4 and 5

有谁能解释一下为什么x之后不增加附注1?


叮当猫咪
浏览 370回答 3
3回答

慕姐4208626

从C99标准(重点是我的)6.5.3.4/2size of运算符产生其操作数的大小(以字节为单位),该操作数可能是一个表达式或类型的括号大小名称。大小由操作数的类型确定。结果是一个整数。如果操作数的类型是可变长度数组类型,则计算操作数;否则,未计算操作数。结果是一个整数常量。

慕容708150

sizeof是编译时运算符,所以在编译时sizeof并将其操作数替换为结果值。这个操作数是未评估(除非它是可变长度数组);只有类型结果很重要。short&nbsp;func(short&nbsp;x)&nbsp;{&nbsp;&nbsp;//&nbsp;this&nbsp;function&nbsp;never&nbsp;gets&nbsp;called&nbsp;!! &nbsp;&nbsp;&nbsp;printf("%d",&nbsp;x);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;this&nbsp;print&nbsp;never&nbsp;happens &nbsp;&nbsp;&nbsp;return&nbsp;x;}int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;printf("%d",&nbsp;sizeof(func(3)));&nbsp;//&nbsp;all&nbsp;that&nbsp;matters&nbsp;to&nbsp;sizeof&nbsp;is&nbsp;the&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;return&nbsp;type&nbsp;of&nbsp;the&nbsp;function. &nbsp;&nbsp;&nbsp;return&nbsp;0;}产出:2如short占据我的机器上的两个字节。将函数的返回类型更改为double:double&nbsp;func(short&nbsp;x)&nbsp;{//&nbsp;rest&nbsp;all&nbsp;same会给8作为输出。

慕码人2483693

sizeof(foo)尽力在编译时发现表达式的大小:6.5.3.4:size of运算符产生其操作数的大小(以字节为单位),该操作数可能是一个表达式或类型的括号大小名称。大小由操作数的类型确定。结果是一个整数。如果操作数的类型是可变长度数组类型,则计算操作数;否则,将不计算操作数,结果是整数常量。简而言之:可变长度数组,在运行时运行。(注:变长阵列是一个特定的特性-而不是分配给malloc(3))否则,只有类型表达式的计算,以及在编译时计算的表达式。
随时随地看视频慕课网APP
我要回答