【发布时间】:2011-10-28 23:05:30
【问题描述】:
您能解释一下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;
}
多次运行的输出:
r = 8 size = 32
r = 6 size = 24
r = 1 size = 4
编译器:gcc 4.4.3
【问题讨论】:
-
我不知道
int arr[r];是如何编译的。我认为堆栈中的数组需要在编译期间知道它们的大小。 -
@orip:看看 C99 的可变长度数组
-
请注意,如果
rand()%10恰好为 0,则行为未定义。 C 不支持零大小的数组(尽管 gcc 可能会这样做作为扩展)。