• c数组初始化(2)


    转载:http://www.cnblogs.com/zjp8023/archive/2008/12/28/c01.html

    一般的数组初始化,也就是申请数组的时候我们就初始化,

    1.char buffer[1000] = {0}; //一般的话,我们只将数组初始化为0,然后再使用.

    C++中,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋值给其余的元素.

    2.char buffer[] = {1,2,3,4,5,6}; 数组会自动计数,我们不用指定数字,以免画蛇添足反而出错。

    3.char buffer[1000];  memset(buffer,10,sizeof(buffer)),对于有特殊需要的我们可以这样将数组中的值全部初始化为1个值,没必要用for循环,效率不高。

    但是char buffer[1000]; memset (buffer,0,sizeof(buffer)) ,个人觉得这有点多此一举.

    一、将数组所有元素初始化为0

    1. 大括号形式
    char a[4] = {0};
    long c[4] = {0};

    2. 字符串形式
    char b[4] = "";

    说明:
    1)上面两种形式实际上都只是将数组的第一个元素置零了,但由于未初始化为0的元素系统会自动初始化为0,所以产生的效果是所以元素都被置零了。但大家不 要误认为{n}的作用是初始化数组的所有元素值为n。需要强调的是,程序员至少必须把数组元素的第一个数组元素初始化为0或者其他数值,才能使剩余的元素自动初始化为 0。也就是说,定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为0。实际上,把数组初始化为0是在编译时完成的。如果不初始化,那么各数 组元素的值将是随机数。
    2)允许以字符串的形式初始化数组,所以,{0}和""的效果是一样的。而且,有时为了表示里面存的是字符串,使用""更醒目。

    二、将数组所有元素初始化为 “非0”

    1. for循环

    char i = 0;
    char a[4];
    long b[4];

    for (i = 0; i < 4; i++)
    {
        a[i] = 1;
        b[i] = 1;
    }

    结果:

    值的情况:
    a[0] = a[1] = a[2] = a[3] = 0x01;
    b[0] = b[1] = b[2] = b[3] = 0x01;

    内存情况(每行八个字节,值为十六进制表示):
    a:01 01 01 01
    b:00 00 00 01 00 00 00 01
       00 00 00 01 00 00 00 01

    2. memset

    char a[4];
    long b[4];

    memset (a, 1, sizeof (a));
    memset (b, 1, sizeof (b));

    结果:

    值的情况:
    a[0] = a[1] = a[2] = a[3] = 0x01;
    b[0] = b[1] = b[2] = b[3] = 0x01010101;

    内存情况(每行八个字节,值为十六进制表示):
    a:01 01 01 01
    b:01 01 01 01 01 01 01 01 
       01 01 01 01 01 01 01 01 

    说明:
    1)for循环和memset的只在char型数组时效果相同,其余情况效果不同,请认真区分二者的区别。
    2)对于非char型数组,使用memset时一定要小心,它是按字节进行赋值的,如果你是想将非char型数组的每个元素置为定值,而不是将内存每8位置为定量,最好使用for循环而不是memset。

  • 相关阅读:
    Jenkins和pipeline
    Docker摘要
    javascript文件加载模式与加载方法
    Pre-shared key
    持续集成CI相关的几个概念
    Fetch诞生记
    Content Security Policy介绍
    vivalidi 一款由Web技术诞生的Web浏览器
    Javascript async异步操作库简介
    Polymer初探
  • 原文地址:https://www.cnblogs.com/zzj2/p/3046830.html
Copyright © 2020-2023  润新知