C++數組的存儲與初始化


  下面隨筆給出C++數組的存儲與初始化的細節內容。

數組的存儲與初始化

一維數組的存儲

 數組元素在內存中順次存放,它們的地址是連續的。元素間物理地址上的相鄰,對應着邏輯次序上的相鄰。

 例如:

一維數組的初始化

在定義數組時給出數組元素的初始值。

  • 列出全部元素的初始值

例如static int a[10]={0,1,2,3,4,5,6,7,8,9};

  • 可以只給一部分元素賦初值

例如static int a[10]={0,1,2,3,4};

  • 在對全部數組元素賦初值時,可以不指定數組長度

例如static int a[]={0,1,2,3,4,5,6,7,8,9}

二維數組的存儲

  • 按行存放

例如: float a[3][4];

可以理解為:

其中數組a的存儲順序為:

a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23

二維數組的初始化

  • 將所有初值寫在一個{}內,按順序初始化

    • 例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12

  • 分行列出二維數組元素的初值

    • 例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

  • 可以只對部分元素初始化

    • 例如:static int a[3][4]={{1},{0,6},{0,0,11}};

  • 列出全部初始值時,第1維下標個數可以省略

    • 例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

    • 或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

注意:

  • 如果不作任何初始化,內部auto型數組中會存在垃圾數據,static數組中的數據默認初始化為0

  • 如果只對部分元素初始化,剩下的未顯式初始化的元素,將自動被初始化為零;

  • 現在我們來看一個用數組存放Fibonacci數列的例子。

例: 求Fibonacci數列的前20

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main() {
 6 
 7     int f[20] = {1,1}; //初始化第0、1個數
 8 
 9     for (int i = 2; i < 20; i++) //求第2~19個數
10 
11         f[i] = f[i - 2] + f[i - 1];
12 
13     for (int i=0;i<20;i++) { //輸出,每行5個數
14 
15         if (i % 5 == 0) cout << endl;
16 
17             cout.width(12); //設置輸出寬度為12
18 
19         cout << f[i];
20 
21     }
22 
23     return 0;
24 
25 }                

運行結果:

例:循環從鍵盤讀入若干組選擇題答案,計算並輸出每組答案的正確率,直到輸入ctrl+z為止。

 1 每組連續輸入5個答案,每個答案可以是'a'..'d' 2 
 3 例: 一維數組應用舉例
 4 
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 int main() {
10 
11   const char key[ ] = {'a','c','b','a','d'};
12 
13   const int NUM_QUES = 5;
14 
15   char c;
16 
17   int ques = 0, numCorrect = 0;
18 
19   cout << "Enter the " << NUM_QUES << " question tests:" << endl;
20 
21   while(cin.get(c)) {
22 
23     if(c != '\n') {
24 
25          if(c == key[ques]) {
26 
27          numCorrect++; cout << " ";
28 
29        } else
30 
31          cout<<"*";
32 
33        ques++;
34 
35     } else {
36 
37       cout << " Score " << static_cast<float>(numCorrect)/NUM_QUES*100 << "%";
38 
39       ques = 0;  numCorrect = 0; cout << endl;
40 
41     }
42 
43   }
44 
45   return 0;
46 
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM