【发布时间】:2012-04-22 03:00:51
【问题描述】:
我读过 C 中的 sizeof 运算符是在编译时解释的,因为在编译时编译器知道数组大小及其类型,sizeof 能够计算数组占用的字节数。但是 sizeof 如何为以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
int s=sizeof(a);
printf("%d",s);
return 0;
}
这里的数组大小在编译时是未知的,那么它是如何正常工作的呢?
【问题讨论】:
-
可变长度数组是个例外,对它们来说,
sizeof在运行时计算,而不是在编译时计算。 -
@MДΓΓБДLL 不,那是关于
malloced 的东西,而不是关于 VLA。 -
@MДΓΓБДLL:您可能的副本正在处理不同的情况(
malloc(),不是 VLA,可变长度数组)。