【发布时间】:2018-08-06 07:39:17
【问题描述】:
我试图了解 sizeof 运算符的工作原理,但遇到了this 题。以下是该问题的代码
#include <stdio.h>
int main() {
int i = 0;
int a[i];
printf("%zu\n",sizeof(a[i++]));
printf("%d\n",i); // Here, print 0 instead of 1
return 0;
}
此处的数组 a 是可变长度的,但当它用作 sizeof 运算符的操作数时,变量 i 不会递增。
一些 cmets 和回答说 a[i++] 不是 VLA 类型,并建议 op 应该使用 2D VLA 来查看副作用(sizeof 评估其 oprand)。
我不明白为什么a[i++] 不符合 VLA 表达式的条件。我认为这与我们可以在传递给函数时不指定数组的第一个维度这一事实有关。
所以问题是一般来说什么是 VLA 表达式?
【问题讨论】:
标签: c sizeof variable-length-array