<style> html, body, .ui-content { background-color: #333; color: #ddd; } body > .ui-infobar { display: none; } .ui-view-area > .ui-infobar { display: block; } .markdown-body h1{ color: #9CCEF2; } .markdown-body h2{ color: #B1D6CA; } .markdown-body h3{ color: #9CCEF2 } .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> ###### tags: `tgirc早修book` # **<font color="9CCEF2">一維陣列</font>** 當遇到需要宣告同類型的多個變數時,如果一個個宣告變數會很麻煩,因此可以使用陣列(array)這個資料型態,來存取多個變數 ## 基本結構 <font color="F5F6B6">**以多個變數儲存**</font> 宣告三個變數來存放各個值,占空間又不方便操作 ```cpp= int score0=90; int score1=77; int score2=85; ``` <font color="F5F6B6">**宣告陣列**</font> 宣告一個長度為 3 ,名稱叫做 score 的陣列,該陣列存有 3 個型態為 int 的變數 ```cpp= int score[3]; score[0]=90; score[1]=77; score[2]=85; ``` <font color="F5F6B6">**輸入各元素的值**</font> 輸入時可以用迴圈來簡化流程 ```cpp= #include <iostream> using namespace std; int main(){ for(int i=0;i<3;i++){ //依陣列大小進行 3 次輸入 cin>>score[i]; } return 0; } ``` 宣告陣列時, `[]` 中的數字表示陣列的長度,且陣列的編號是從零開始,編號皆為正整數。 陣列中每個元素的型別,皆等於宣告的型別。 | 編號 | 數值 | | ---- | ---- | | 0 | 90 | | 1 | 77 | | 2 | 85 | ## 陣列的更多細節 解題時,建議將陣列宣告在 main 函數區塊的外部,以避免 [Stack Overflow](https://hackmd.io/tTAs-GXpQIqGLfIrEkfLRA) 的風險 ```cpp= #include <iostream> using namespace std; int score[3]; //這裡 int main(){ for(int i=0;i<3;i++){ cin>>score[i]; } for(int i=0;i<3;i++){ cout<<"score["<<i<<"]= "<<score[i]<<'\n'; } return 0; } ``` 這樣宣告會讓 score 陣列成為一個 [**全域變數**](https://openhome.cc/Gossip/CGossip/Scope.html),因為若是宣告過大的陣列在 main() (包含其他函數)裡面,可能會導致程式當掉,宣告在全域變數就能避免這個問題。 陣列一宣告完後大小就會固定不能改變,因此在宣告長度時要考慮到最糟糕的情況所需要的數量,並留至少 5~10 作為緩衝,降低溢位風險,題目如果沒有講明最大範圍的話都可以多宣告一些 <font color="F5F6B6">**陣列的初始值**</font> ```cpp= int ary[3]={0,1,0}; ``` :::info { } 僅限用於初始化,並不能用於對已宣告好的陣列做賦值(assign)的動作 ::: 以下為錯誤示範,會導致編譯錯誤 ```cpp= int ary[3]; ary[3]={0,1,0} ``` 初始化時沒有被指定到的部分會被自動填入 0,可以看下方的例子 ```cpp= #include <iostream> using namespace std; int ary[3]={0}; int main(){ for(int i=0;i<3;i++){ cout<<ary[i]<<' '; } return 0; } ``` ![](https://i.imgur.com/1Ovj3K4.png) :::info 這段程式碼並不是將每一格都變成 0,而是第一位初始化成 0 後再補上 0 ::: 所以下方的程式碼並不會因為第一位是 1,所以其他格都變為 1 ```cpp= #include <iostream> using namespace std; int ary[3]={1}; int main(){ for(int i=0;i<3;i++){ cout<<ary[i]<<' '; } return 0; } ``` ![](https://i.imgur.com/jrBQaBf.png)