C++筆記-陣列

陣列

現在寫個小程式,輸入N,然後輸入N個數字,最後把N個數字顛倒輸出,

如果我們輸入的N達到幾千幾萬,那宣告幾千幾萬個變數太不切實際了。我們其實可以一次宣告很多變數,

宣告方式: 資料型態 名稱[長度];

這裡的長度需要是編譯時期的常數,像是

1
2
int a[100];
double b[100];

只有在GCC的編譯環境我們可以使用

1
int a[n]; 

如果要動態宣告,要用到其他資料結構跟動態記憶體宣告,之後會在講指標提到。

再來我們就能使用a[0],a[1],a[2]…a[n-1]當作每個變數了,

在[ ]中的數字,我們稱之為"索引值",索引值對應的值,稱為"元素",特別注意,

索引值是從0開始的,即0代表第1個元素,1代表第2個元素,n-1代表第n個元素

如果貿然存取未初始化或超出陣列索引範圍的地方會出現無法預測的情況

參考:C++筆記-未定義行為

剛剛宣告完的陣列是沒有初始化的,

我們可以一次初始化全部元素,

1
int a[100]={0}; // 將這100個元素全部初始化為0

或者直接初始化每個陣列值

1
int a[5]={1,5,4,3,2};

如果我們只初始化前面幾個元素,剩下的元素會自動初始化為0

1
2
int a[5]={1,5,4};
// a[0]=1,a[1]=5,a[2]=4,a[3]=0,a[4]=0

最後我們可以寫出剛剛那題的程式了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include<bits/stdc++.h>
using namespace std;
int main(){
  int n;
  cin >> n;
  int a[n]; // GCC
  for(int i=0;i<n;i++) cin >> a[i]; //利用上次講的for迴圈輸入每個變數值,注意從0開始
  
  for(int i=n-1;i>=0;i--) cout << a[i] << endl; //倒序輸出,注意最後一個索引值是n-1

}

如果要宣告二維陣列存更多東西,其實就是每個元素都是一個陣列

1
int arr[10][10];// 宣告10*10的二維陣列

多維以此類推