gpt4 book ai didi

c - 什么是 VLA 类型的表达式?

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:05 25 4
gpt4 key购买 nike

我试图了解 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 不会递增。

一些评论和回答说 a[i++] 不是 VLA 类型,并建议 op 应该使用 2D VLA 来查看副作用(sizeof 计算其操作数)。

我不清楚为什么 a[i++] 不符合 VLA 表达式的条件。我认为这与我们可以不指定第一个维度这一事实有关传递给函数时的数组。

所以问题是通常什么被认为是 VLA 表达式?

最佳答案

I don't clearly understand why a[i++] doesn't qualify as a VLA expression

a[n] 不是 VLA 表达式,即使 a 是 VLA,因为表达式生成 VLA 的单个元素,而不是 VLA 本身。

in general what is considered a VLA expression?

在您的示例中,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 ( demo ) .

关于c - 什么是 VLA 类型的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48995441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com