我试图理解相当大的操作员的工作,我遇到了这的问题。下面是这个问题的代码
#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是可变长度的,但是当它作为运算符大小的操作时,变量i不会增加。
一些评论和回答说,a[i++]不是VLA类型,并建议op应该使用2D VLA来查看副作用(相当大的评估值)。
我不明白为什么a[i++]不符合VLA表达式的条件。,我认为它与这样一个事实有关:当传递给函数时,我们可以不指定数组的第一个维度。
所以问题是,一般来说,什么是VLA表达式?。
发布于 2018-02-26 19:12:20
我不明白为什么
a[i++]不符合VLA表达式的条件
a[n]不是VLA表达式,尽管a是VLA,因为表达式生成VLA的单个元素,而不是VLA本身。
一般来说,什么是VLA表达式?
在您的示例中,a将是一个VLA表达式,因为它表示可变长度数组.
2D VLA将给出一个场景,其中sizeof将计算其操作数:
int x, y;
scanf("%d %d", &x, &y);
int a[x][y];
int i = 0;
size_t z = sizeof(a[i++]);
printf("%d %d\n", i, (int)z);这会打印1,因为现在不仅a是VLA,a[n]也是VLA (演示)。
https://stackoverflow.com/questions/48995441
复制相似问题