int a[3]={1,2,3};
//这段代码是在编译阶段还是运行阶段初始化的呢
//如下的呢
void test(int i)
{
int a[3]={i,i,i}; //这个i是不确定的,这个肯定是运行阶段完成的把
}
数组的长度是在编译时确定,这样就能为它分配内寸,但是不会初始化.
长度编译确定,初始化在运行时确定。
如果加上const,则其值在编译期就确定了。
const int a[3]={1,2,3};
否则,在编译期只确定内存大小,可以修改里面的数据,所以其值在运行期确定。
如果是动态数组的话:
int* a = new int[3];
则其长度也是运行期确定的。
存储属性是static或者extern,就是在函数外定义的,初始化是在编译时
int a[]={0,1,2,3,4};
00411A85 mov dword ptr [a],0
00411A8C mov dword ptr [ebp-20h],1
00411A93 mov dword ptr [ebp-1Ch],2
00411A9A mov dword ptr [ebp-18h],3
00411AA1 mov dword ptr [ebp-14h],4
要证据,请看以上汇编。毫无疑问,是在运行期完成。