数组初始化是在编译器还是在运行期?

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
要证据,请看以上汇编。毫无疑问,是在运行期完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值