• C/C++数组初始化


    0 Xcode 10.1,编译器clang GNU14++

    1、整型数组的初始化-栈初始化

    //默认初始化
    int a[5] = {};    //[0, 0, 0, 0, 0]
    //全部初始化为0
    int a[5] = {0};    //[0, 0, 0, 0, 0]
    //c++11新写法
    int a[5]{};    //[0, 0, 0, 0, 0]
    
    //注意,想要整型数组 全部初始化为1的时候不能粗暴的设置为 
    int a[5] = {1};    //[1, 0, 0, 0, 0]
    // 因为 数组初始化列表中的元素个数小于指定的数组长度时, 不足的元素以默认值填补。
    //可以分别赋值
    int a[5] = {1,1,1,1,1}; //[1,1,1,1,1]
    

    2、字符串的初始化-栈初始化

    和整型的初始化基本一致,会调用构造函数

    
    string *str = string[5];    //调用5次默认构造函数
    string *str1 = string[5]{"aaa"};    //数组中的第一个元素调用 string::string(const char *)  进行初始化。后面四个调用 默认构造函数
    
    

    3、数组的默认初始化

    如果不明确指出初始化列表,那么基本类型不会被初始化(全局变量和静态变量除外),所有内存都是脏数据;且自定义的类类型会为每个元素调用默认构造函数进行初始化

    int a[5]{};
    a[6];      //32766
    a[10];    //1474921429
    // Xcode会提示 Array index 10 is past the end of the array (which contains 5 elements)。虽然不会爆红,但是Xcode提示越界了。这在程序中也是需要特别注意的,越界时会取到脏数据。
    string str[5];     //["","","","",""]
    string str1[5] = {"","2","",""};     //["","2","',"",""]
    string str2[5] = {"a"};     //["a","","","",""]
    
    

    4、数组的堆初始化

    
    int *a = new int[5];        //脏数据数组
    int *str = new string[5];    //空字符串数组
    int *b = new int[5]{0};    //   [0,0,0,0,0]
    int *str1 = new string[5] {"aaa"};    //["aaa","","","",""]
    //以上几行代码遵循栈中数组的初始化规则,除此之外这里还有一个新语法
    int *c = new int[5]();    //[0,0,0,0,0]
    //该语法后面的一对圆括号,表示使用默认值初始化整个数组,所以对于类类型来说,new string[5] 与 new string[5]() 是等价的,都会调用默认构造函数进行初始化;但是对于基本类型就不同了。new int[5]根本不会初始化,而new int[5]()则会使用int()的值,即0进行初始化。
    
    
  • 相关阅读:
    16-1-6 kafka的操作
    16-1-5:MapReduce
    MapReduce概述
    MapReduce的代码实现过程分析
    MapReduce
    HDFS2—SequenceFile(小文件的解决方案)
    HDFS2—federation
    hdfs
    缓解爬虫ip被封的概率
    zookeeper集群搭建
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/11972219.html
Copyright © 2020-2023  润新知