C++中的陣列問題
阿新 • • 發佈:2019-01-25
和C語言一樣,C++中也存在陣列,而且用法也與C語言中的一樣。
- 陣列的定義:和C語言中的一樣,定義一個數組需要指定其大小和型別,但注意,陣列的定義不能出現未知長度或長度為變數的情況,如:
int a[5]; //定義一個長度為5的整形類的陣列,即該陣列中可存放5個整形數
int a[]; //產生編譯錯誤,陣列a的長度未知
int i;
int a[i]; //產生邏輯錯誤,因為i是未知數
//但是如下定義是合法的,但會產生警告:
int j;
cin >>j; //從鍵盤中輸入j的值
int b[j]; //此處會出現警告“unused variable 'b'[-Wunused-variable]”
- 陣列的賦值:陣列即可以一一賦值,也可以同時賦值,還可以通過for或while迴圈來賦值,例如:
int a[] = {1, 2, 3, 4, 5} //定義的同時賦值,這時a的大小可以不寫,編譯器會根據後面資料的個數來預設a的長度,此處為5
int b[4]; //一一賦值
b[0] = 1; //注意,陣列的第一個資料一定是從0開始到長度-1
b[1] = 2;
b[2] = 3;
b[3] = 4;
int c[100];
for(int i = 0; i < 100; i++)
c[i] = i; //採用for迴圈賦值,這裡的i不再是變數,因為在for迴圈中,每次迴圈i都有一個具體的值
- 陣列的輸出問題:若要輸出陣列中的全部內容,可以採用一一輸出,也可用for或while迴圈輸出,例如:
int b[2] = {1, 2};
cout << b[0];
cout << b[1]; //一一輸出
int c[100];
for(int i = 0; i < 100; i++)
c[i] = i;
for(int i = 0; i < 100; i++)
cout << c[i] << "\t"; //採用for迴圈輸出
- 賦值與輸出,如果一個數組的長度為5,但賦值的只有2個,若全部輸出,則剩下的3個數輸出任意數字,例如:
int a[5];
a[0] = 5;
for(int i = 0; i < 5; i++)
cout << a[i] << endl;
輸出結果:
但若採用同時賦值的方法,則其他的預設為0:
int a[5] = {5};
for(int i = 0; i < 5; i++)
cout << a[i] << endl;
輸出結果:
- 陣列所佔空間:如果陣列只是定義,並沒有初始化(賦值),那麼該陣列所佔的空間只是首地址的空間,但如果初始化了(賦值了),則該陣列所佔空間為長度×陣列型別所佔空間,不論是否全部賦值:例如:
int a[5];
cout << sizeof(a); //輸出4,因為首元素為int型4位元組
a[0] = 5;
cout << sizeof(a); //輸出20,因為此時已經初始化了,雖然只給了1個數據,但其大小已經是5×4
char b[5];
cout << sizeof(b); //輸出1
b[0] = 'a';
cout << sizeof(b); //輸出5
- 二維陣列和多維陣列:二維陣列相當於是一個矩陣,分為行和列,其定義與賦值同一維陣列,例如:
int a[2][3]; //定義一個兩行三列的“矩陣”
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3; //先給第一行賦值
//……再給第二行賦值
int b[2][3] = {1, 2, 3, 4, 5, 6}; //直接同時賦值
//int b[][] = {1, 2, 3, 4, 5, 6}; 非法,會產生編譯錯誤,因為編譯系統不知道有多少行或多少列
//int c[2][] = {1, 2, 3, 4, 5, 6}; 非法,因為已經給定了行,但列未給出
//int d[][3] = {1, 2, 3, 4, 5, 6}; 非法,因為已經給定了列,但行未給出
//int e[][] = {{1, 2, 3}, {4, 5, 6}}; 非法
//還可以採用for或while迴圈賦值,只是這時需要使用兩次:
int f[2][3];
for(int i = 0; i < 2; i++){ //控制行迴圈
for(int j = 0; j < 3; j++){ //控制列迴圈
f[i][j] = i + j; //賦值
}
}
同樣地,輸出也可以採用同樣地方法。下面就可以利用二維陣列來輸出一些矩陣了,例如:請寫一個程式要求設定一個矩陣,要求交換其行和列地位置,程式碼如下:
#include <iostream>
using namespace std;
int main(){
int array[4][4];
for(int i = 0; i < 4; i++) //採用for迴圈給4×4矩陣賦值
for(int j = 0; j < 4; j++)
array[i][j] = i * j + j;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++)
cout << array[i][j] << "\t"; //輸出,每個數之間加一個tab
cout << endl; //每行之間換一行,看起來比較舒服
}
int flag; //設定一箇中間變數用以交換
for(int i = 0; i < 4; i++){
for(int j = 0; j < i; j++){ //控制迴圈,列小於行即可,避免再次交換回來
flag = array[i][j];
array[i][j] = array[j][i];
array[j][i] = flag; //交換
}
}
cout << "----------交換後----------" <<endl; //再次輸出
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++)
cout << array[i][j] << "\t";
cout << endl;
}
return 0;
}
輸出結果:
如有錯誤,歡迎大家批評與指正!