sizeof
运算符是编译时运算符,但在下面的程序中,它在运行时更改。
#include <stdio.h>
void func (int i) {
int a[i];
printf("%d \n", sizeof(a));
}
main() {
int i = 0;
while(i <= 5) {
func(i);
i++;
}
}
内存将在运行时分配。编译器如何使用out padding来计算结构大小?
答案 0 :(得分:6)
您的信息已过时。 a
是一个可变长度数组;对于那些,sizeof
是在运行时确定的。可变长度数组是C99功能,在写入信息源时不存在。
答案 1 :(得分:2)
VLA - s几乎是sizeof
不是编译时常量的唯一情况。
答案 2 :(得分:1)
a[i]
在标准C ++中不合法,虽然它被一些编译器支持作为扩展(例如GCC documents it here) - 这样的扩展可能会为{{{{{{ 1}}运算符,但最明智地将其基于C行为。