sizeof运算符在运行时更改?

时间:2014-08-11 07:21:39

标签: c++ c

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来计算结构大小?

3 个答案:

答案 0 :(得分:6)

您的信息已过时。 a是一个可变长度数组;对于那些,sizeof是在运行时确定的。可变长度数组是C99功能,在写入信息源时不存在。

答案 1 :(得分:2)

VLA - s几乎是sizeof不是编译时常量的唯一情况。

答案 2 :(得分:1)

a[i]在标准C ++中不合法,虽然它被一些编译器支持作为扩展(例如GCC documents it here) - 这样的扩展可能会为{{{{{{ 1}}运算符,但最明智地将其基于C行为。