在 sizeof 运算符中评估操作数

Hap*_*tal 2 c sizeof

由于 sizeof 运算符评估操作数是否为 VLA,因此我尝试将其测试为:

#include<stdio.h>
int main(void)
{
  int sz=20,i=0,j=0;
  int arr[sz];
  printf("%d\n",sizeof((++i,sz)));
  printf("%d\n",sizeof((++j,arr)));
  printf("%d\n%d\n",i,j); 
}  
Run Code Online (Sandbox Code Playgroud)

我认为我不会增加,因为 sz 不是 VLA,但 j 会增加,因为 arr 是 VLA。
但是在输出中, i 和 j 都没有增加。

Alo*_*hal 5

引用我对另一个问题的回答

“转换”是由于减法运算符。您可以使用逗号运算符看到类似的,也许更令人惊讶的结果:

printf("%zu\n", sizeof(1, a));
Run Code Online (Sandbox Code Playgroud)

还将打印sizeof(int *),因为逗号运算符导致在值上下文中使用。

基本上,由于逗号运算符的原因,类型 arr是指针,VLA 的大小并没有出现在图片中。有关详细信息,请参阅我的链接答案。