1. 程式人生 > >C++ primer Plus書之---C++陣列

C++ primer Plus書之---C++陣列

先看下面的程式碼

#include "iostream"
using namespace std;

int main() {
	int cards[4] = {1, 2, 3, 4};
	int hand[4];
	hand[4] = {2, 3, 4, 5};
	hand = cards;
}

執行結果如下:

首先hand[4]表示的是陣列的第5個元素(下標從0開始)而不是表示宣告長度為4的陣列,  另外c++也不允許如程式第八行那樣給陣列初始化(hand = cards)

 

再看下面這個例子

#include "iostream"
using namespace std;

int main() {
	int cards[4] = {1, 2, 3, 4};
	int hand[4];
	//hand[4] = {2, 3, 4, 5};
	//hand = cards;
	
	float hotel[5] = {5.0, 2.5};
	long totals[3] = {0};
	short things[] = {1, 2, 3};
	
	cout << "hotel[2], hotel[3], hotel[4] = " << hotel[2] << ", " << hotel[3] << ", "  << hotel[4] << endl;
	cout << "sizeof things = " << sizeof(things) << endl;
}

執行結果:

從執行結果可以看出來

float hotel[5] = {5.0, 2.5}; 這行程式碼聲明瞭一個長度是5的float型別的陣列名為hotel, 並且只初始化了前兩個資料, 後三個預設都是0,  所以c++裡可以使用類似long totals[3] = {0}這種方式對整個數組裡的元素進行初始化

另外c++允許short things[] = {1, 2, 3}; 不明確宣告陣列的長度, c++編譯器可以根據初始化時候傳入的數值個數來自動確定陣列的長度.

c++陣列初始化的幾種方法:

可以省略中間的"="

double score[3]{90.12, 99.99, 60.12};

大括號內可以不寫任何東西, 表示所有資料均為0:

float nums[100]{};

陣列初始化的時候不能把大的資料型別資料賦給小的資料型別的陣列:

long num1[] = {1, 2, 3.0};
char num2[] {'a', 'b', 123123, '\0'};
char num3[] {'a', 'b', 123, '\0'};

上面三行程式碼第一行3.0是double而陣列是long型的不合要求, 第二行因為123123的範圍超出了char的範圍不合要求, 第三行123是char能表示的數值, 所以沒有問題