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進行初始化。

打賞

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2022 CODEPRJ.COM