根据C99标准,sizeof()运算符仅考虑操作数的类型,它可以是表达式或类型的名称(即,int,double,float等),而不是在评估表达式时获得的值。因此,不评估sizeof()运算符内的操作数。仅当操作数的类型为可变长度数组时才进行评估,因为在这种情况下,只有在对表达式求值之后才能确定大小。
情况1:
当传递sizeof()方法时,将使用固定大小的结构:
在这种情况下,sizeof()运算符不会评估该参数。仅检查参数的类型,并返回其大小。
下图显示了这种情况下sizeof()运算符的工作流程:
范例1:
与预期值4相比,增量后x的输出值仍为3。这是因为sizeof运算符不需要评估表达式即可获得大小,因为操作数的数据类型不变,因此大小保持不变。
#include
int main()
{
int x = 3;
printf("%d\n", sizeof(x++));
printf("x = %d", x);
return 0;
}
输出:
4
x = 3
情况2:
当传递sizeof()方法时,将使用可变大小的结构:
在这种情况下,sizeof()运算符评估该参数以查看大小是否发生任何变化。如果找到,则首先修改大小,然后返回最终大小。
下面的示例说明了这种情况下的sizeof()运算符:
范例2:
在此示例中,sizeof运算符需要评估表达式以便计算图中所示的数组的大小。因此,在这种情况下,我们得到增量后的x值。
#include
int main()
{
int x = 3;
printf("%d\n", sizeof(int[x++]));
printf("x = %d", x);
return 0;
}
输出:
12
x = 4
范例3:
同样在此示例中,sizeof运算符需要评估表达式以便计算图中所示的数组的大小。在此示例中,使用了后递增运算符,因此第一行的输出为16。在第二行中,x的值在递增后打印。
#include
int main()
{
int x = 3;
printf("%d\n", sizeof(int[++x]));
printf("x = %d", x);
return 0;
}
输出:
16
x = 4
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。