zoukankan      html  css  js  c++  java
  • 关于C/C++中数组元素的初始化

    1.一维数组初始化

    对于一维数组,其初始化有一个错误的观点是:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.

    数组可以用一个列值来初始化,例如
             int v1[] ={1,2,3,4};
             char v2[]={'a','b','c',0};
    当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 int[4] 和char[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如:
             char   v3[2] ={'a','b',0};   //错误:太多的初始化值了
             char   v3[3] ={'a','b',0};   //正确

    如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为 0。例如
             int   v5[8]={1,2,3,4};
    等价于
              int   v5[8]={1,2,3,4,0,0,0,0};

    从这里可以看出,为啥我们想把数组元素初始化为0的时候,用int a[256]={0}是完全正确的,但是int a[256]={1}却仅仅是把第一个元素初始化为1,后面元素全部都是0。

    2. 二维至多维数组的初始化

       此时情况与1维时类似,例如:

                              int a[8][8]={0};

    则可以将数组a中所有的元素均初始化为0。

    如果是:

                            int a[8][8]={1,2,3,4,5,6,7,8,9,10};

    则可以将a[0][0]至a[0][7]八个元素赋值为1到8,a[1][0]=9,a[1][1]=10.其余元素全部为0.

    对于n维数组a:

                            int a[D1][D2][D3]…[Dn] = {1,2,3,4,…?};

    会将1,2,3,4….等值依次赋值给a[0][0]….[0]开始按照最后一个维度不断递增的各个地址。

    说明:本文的以上结论均在VC6.0环境下做过实验测试,证明无误,暂时不确定在其他的编译环境下是否如上文所述。

    另外,数组的初始化若初始化为0的话,还可以用:

    int matrix[8];

    memset(matrix,0,8*sizeof(int));

    int matrix[8][8];

    memset(matrix,0,64*sizeof(int));

    但是如果是想用其他非零值初始化非char型数组的话,则不能用上述的方式,因为memset是针对于每一个字节进行赋值的。例如:

    int matrix[8];

    memset(matrix,2,8*sizeof(int));

    因为int占用4个字节,故而最后matrix每一个元素得到的初值实际上是:0x2222(16进制),而不是2.但如果数组是char matrix[8]则可用上述方式赋值。

  • 相关阅读:
    mxd与service的关系
    转到不同磁盘
    通过vs命令提示符注册dll
    粘贴带有行号的代码到vs2010中
    添加本地图层出现要求cross domain policy的错误
    删除服务后添加相同名字的服务注意点
    Silverlight_F5调试时要求安装相应版本的运行时
    网页优化
    SqlBulkCopy快速批量大数据插入
    2012项目总结
  • 原文地址:https://www.cnblogs.com/jiayouwyhit/p/3227212.html
Copyright © 2011-2022 走看看