C++数组初始化,

  • 定义在函数体内的内置类型的对象(局部变量),如果没有显示初始化,则其值是未定义的,访问它是危险的int a2[10];

  • 如果使用static修饰(局部静态变量),则会自动初始化成默认值0 static int a4[10];

  • 或者手动初始化,初始化个数小于数组长度的,剩余元素会自动初始化成默认值0 int a3[10] = {1};

  • 全局变量的内置类型会自定初始化为默认值0,int a[10];

memset 初始化数组的误区
  1. memset 是按字节对内存块进行初始化的函数,用来给某一块内存空间进行赋值的;

  2. memset 作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法;

  3. 成员变量可以是简单的内置类型(short、int、long、char、float、double);

  4. memset函数不能将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同):

    memset是逐字节进行初始化,比如对整型数进行初始化,int是32位的共四个字节,每个字节设置为n,则

    如果n=1,1为00000001 00000001 00000001 00000001,转为十进制数是1+128+1*216+12^24=16843009,而不是1;

    如果n=0,0为 00000000 00000000 00000000 00000000,转化为十进制为0;

    如果n=-1,-1为 11111111 11111111 11111111 11111111(原码的反码的补码),转化后为-1。

int a[10];
void test(){
    int a2[10];
    int a3[10] = {1};
    static int a4[10];

    for(int i=0;i<10;i++)
        cout<<a[i]<<" ";
    cout<<endl;

    for(int i=0;i<10;i++)
        cout<<a2[i]<<" ";
    cout<<endl;

    for(int i=0;i<10;i++)
        cout<<a3[i]<<" ";
    cout<<endl;

    for(int i=0;i<10;i++)
        cout<<a4[i]<<" ";
    cout<<endl;
    
    int a5[10];
    memset(a5,1,10*sizeof(int));
    for(int i=0;i<10;i++)
        cout<<a5[i]<<" ";
    cout<<endl;
    
}

/* 对应的输出  a a2 a3 a4
0 0 0 0 0 0 0 0 0 0 
-442629216 32766 170005253 1 -442629216 32766 -442628816 32766 10 0 
1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值