【发布时间】:2018-03-10 10:29:24
【问题描述】:
请考虑
#include <stdio.h>
int main(void) {
int size = 1;
int foo[1];
int bar[size];
int* pfoo = 0;
int* pbar = 0;
printf("%zu %zu\n", sizeof(pfoo = foo), sizeof(pbar = bar));
printf("%p %p\n", pfoo, pbar);
return 0;
}
在https://ideone.com/VeiJXH 上运行时的输出是
8 8
(无)(无)
我希望将pbar 设置为bar 的第一个元素的地址,因为bar 是一个可变长度数组。我认为sizeof 在运行时针对可变长度数组进行了评估,这意味着pbar 将不为零。
发生了什么事?这不是测验;这是我在代码中遇到的问题的简化版本。
编辑:我不认为重复在这里有帮助 - 我的问题是 sizeof 没有被评估为可变长度数组。
【问题讨论】:
-
pbar = bar的结果类型是int*。它与VLA大小无关,因此编译器不需要对其进行评估。 -
@BLUEPIXY:啊,我完全理解。请问你能回答吗?
标签: c