1. 程式人生 > >陣列(C語言)

陣列(C語言)

陣列:一組具有相同型別資料的集合。

1、 一維陣列的建立

一維陣列的定義方式:type_t  arr_name[ count ];

                                   //type_t 陣列元素的型別

                                  //arr_name 陣列名

                                  //count 陣列元素的個數,是一個常量表達式

   eg: int arr1[10];

        float arr2[20];

        double arr3[30];

注意:(1)、陣列名的命名規則和變數名的命名規則相同;

           (2)、[ ] 中必須是常量,不可以是變數

             eg:int count = 10;

                  int arr4[count];    //在這裡,count為整型變數,故陣列建立失敗。

2、一維陣列的初始化

   初始化方式:

  (1)、定義陣列時對陣列全部元素賦予初值;

        eg: int arr1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

  (2)、定義陣列時只對一部分元素賦予初值;

       eg: int arr2[10] = { 0, 1, 2, 3 };   //陣列有10個元素,前四個元素賦予了初值,其餘元素值為 0

   (3)、若初始陣列元素都為 0

       eg: int arr3[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

             int arr4[10] = { 0 };        //以上兩種均可實現,但一般情況下,我們會使用後一個定義方式。

    (4)、對全部元素賦予初值,可不定義陣列大小

      eg: int arr5[ ] = { 0, 1, 2, 3, 4}; //陣列有5個元素

   注意:在定義字串時

           

3、一維陣列的使用

   C語言規定只能逐個引用陣列元素,不可以一次引用整個陣列

   使用形式:arr_name [ n ] ;

         eg: int arr1[ 5 ] = { 0, 1, 2, 3, 4};

               t = arr1[3];   //此時 t = 3;表示取陣列中下標為3 的元素,陣列中第一個元素的下標為 0 ,以此類推。

   注意: 陣列的大小可通過計算得到

              int arr2[ ] ={ 0, 1, 2, 3, 4};

              int sz = sizeof(arr2) / sizeof(arr2[0]);

4、一維陣列在記憶體中的儲存

          程式碼                                                                                       結果

          

   結論:陣列在記憶體中是連續存放的

5、指標的初識

     因在下面的內容中涉及到使用指標訪問陣列的知方法,故在這裡大致描述一下指標。

    首先,看一下記憶體的編址:

                 

   (1)、記憶體中的每個記憶體單元對應一個地址;

   (2)、在 32 位平臺上指標的大小為 4 個位元組,在 64 位平臺上指標的大小為 8 個位元組。

      指標變數指存放一個地址的變數。

           eg:int n = 10;

                int *p = &n;    //指標變數 p 存放的是 n 的地址

               *p = 20;   //所改變實質上是 n 的值

6、一維陣列的指標訪問    

  (1)       程式碼                                                                                結果

             

      結論:陣列名就是陣列首元素的地址

    (2)       程式碼                                                                                       結果

            

      結論:陣列名+整數 i 運算 = 陣列下標為 i 的地址

7、二維陣列的建立

     與一維陣列的建立類似;

     eg: int arr1[3][4];

           double arr2[ ][4];   // 行可以省略,列不可以省略

8、二維陣列的初始化

     與一維陣列的初始化類似;

     eg: int arr1[3][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 } , { 9, 10, 11, 12 } };

           int arr2[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

           int arr3[3][4] = { { 3 }, { 5 }, { 9 } };

           int arr4[3][4] = { { 3 }, { 0, 5 },{ 0, 0, 9}};

9、二維陣列的使用

          與一維陣列一樣使用下標引用;

         使用形式:arr_name[ i ][ j ];   //指下標為(i,j)的元素

                eg: int arr1[3][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 } , { 9, 10, 11, 12 } };

                      printf("%d\n",arr1[2][1]);        //輸出的值為10

10、二維陣列在記憶體中的儲存

                       程式碼                                                                        結果

                  

               結論:二維陣列在記憶體中的儲存也是連續的

11、二維陣列的指標訪問

  (1)      程式碼                                                                                                                             結果

                

           結論:陣列名就是陣列首元素的地址。

   (2)         程式碼                                                                                                                             結果

                  

           結論:陣列名+整數4* i +j 運算 = 陣列下標為 ( i , j) 的地址

12、有關陣列的運算

     (1)、一維陣列

                  

               注:*&a 相當於 a

     (2)、字元陣列

                    程式碼                                                                                           結果

                   

                   

              注:strlen()函式是用來求一個字串長度的。因為arr的結尾不是'\0',strlen()會繼續向後檢索,直到遇到'\0',而這些區域的內容是不確定的,故輸出的結果中不確定返回多少。

                        程式碼                                                                                        結果

                  

                   

                   程式碼                                                                                    結果

                  

                   

     (3)、二維陣列

                  

    總結:sizeof(陣列名):這裡的陣列名錶示整個陣列;

               & 陣列名 :這裡的陣列也表示整個陣列。

13、陣列作為函式引數

      在寫程式碼時,在陣列作為引數的時候,實際上只是把陣列首元素的地址傳了過去,不會把整個陣列傳過去。

    eg: void Max(int arr1[ ])

          {       

                  int sz = sizeof(arr1) / sizeof(arr1[0]);             

          }

   分析:在上面這個例子中,int arr1[ ]表示一個指標,即 int *arr1;

             所以我們會得到 sz = 1;而不能表示整個陣列元素的個數。

             往往我們在使用陣列作為引數的時候,會選擇把陣列大小的相關內容傳過去(比如直接傳過去陣列元素的個數 或者 傳過去左右下標,用左右下標控制位置)。