具有随机长度的数组的sizeof()

zol*_*i2k 11 c random gcc sizeof

你能解释一下sizeof()随机长度数组的工作原理吗?我认为sizeof()在编译期间计算数组,但是,具有随机长度的数组的大小似乎是正确计算的.

例:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main(){
    srand ( (unsigned)time ( NULL ) );
    int r = rand()%10;
    int arr[r]; //array with random length
    printf("r = %d size = %d\n",r, sizeof(arr)); //print the random number, array size
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

多次运行的输出:

r = 8 size = 32
r = 6 size = 24
r = 1 size = 4
Run Code Online (Sandbox Code Playgroud)

编译器:gcc 4.4.3

And*_*nck 13

在C99中,sizeof可变大小的数组在运行时计算.从C99草案6.5.3.4/2:

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.大小由操作数的类型确定.结果是整数.如果操作数的类型是可变长度数组类型,则计算操作数 ; 否则,不评估操作数,结果是整数常量