c 陣列初始化的種類有:1、整數陣列的初始化;2、字串的初始化;3、陣列的預設初始化;4、陣列的堆初始化。
c 陣列初始化的種類有:
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进行初始化。
#【相關學習推薦:C語言教學影片】
以上是c++數組初始化的種類有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!