C語言數組的介紹

        
所謂數組,就是用於儲存多個相同類型數據的集合。這篇文章會從數組的創建和初始化、數組的使用、數組的指針訪問等方面介紹一維數組和二維數組。

一維數組

       一維數組是最簡單的數組,其邏輯結構是線性表。要使用一維數組,需經過定義、初始化和應用等過程。

一、一維數組的創建和初始化

        創建方式:

        type_t   arr_name  [const_n];   //type_t 數組的元素類型(int char等)  

                                                      //const_n 常量表達式,指定數組的大小(不能使用變量)        

        初始化:

        在創建數組的同時要給數組的內容一些合適初始值。

        eg: int arr[10] = {1, 2, 3};

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

                char arr[3] = {'a', 98, 'c'};

                char arr[] = "abcdef";

        數組在創建時如果想不指定數組的確定大小就需要初始化,數組的元素個數根據初始化的內容來分配。


二、一維數組的使用

        數組定義時有一個操作符 [ ],這是下標引用操作符,它就是數組訪問的操作符。

        比如:

        int arr[10] = { 0 };  //數組的不完全初始化

        int i = 0;   //i爲下標

        for(i = 0; i < 10; i++)

        {

              arr[i] = i;

        }

        這是一個對數組的一個簡單定義,數組是使用下標來訪問的,下標從0開始。

        tips:數組的大小可以通過計算得到,sz爲數組大小,代碼如下。

                    int arr[10];

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


三、一維數組在內存中的存儲

        數組內的元素在內存中是連續存放的。

        可以通過打印出地址的方式來驗證。


四、一維數組的指針訪問

        我們得知數組的數組名是數組首元素的地址,而數組名+整數既是對應元素的地址。

        可以通過*(數組名+整數)的方式,利用指針來訪問數組。


        二維數組

        前面介紹的數組只有一個下標,稱爲一維數組, 其數組元素也稱爲單下標變量。在實際問題中有很多量是二維的或多維的, 因此C語言允許構造多維數組。多維數組元素有多個下標, 以標識它在數組中的位置,所以也稱爲多下標變量。本小節只介紹二維數組,多維數組可由二維數組類推而得到。

        一、二維數組的創建和初始化

     創建:

            type_t   arr_name  [const_n1] [const_n2];

            其中常量表達式1 const_n1代表第一維下標的長度,常量表達式2 const_n2代表第二維下標的長度。

            初始化:   

            int a[3][4] = {.......};         

     int a[3][4]; 說明了一個三行四列的數組,數組名爲a,其下標變量的類型爲整型。該數組的下標變量共有3×4個,即:
        a[0][0],a[0][1],a[0][2],a[0][3]
        a[1][0],a[1][1],a[1][2],a[1][3]
        a[2][0],a[2][1],a[2][2],a[2][3]

        二、二維數組的使用

            和一維數組相同,二維數組的使用也是通過下標的方式。


       三、二維數組在內存中的存儲

             通過打印出數組的每個元素得出,二維數組在內存中也是連續存儲的。

             (且低地址到高地址是按行從低到高分配的)


        四、二維數組的指針訪問

         1、動態數組方式。 

         完全由動態數據構成二維數組。如M行N列的數組,先分配M個一維指針空間,然後在每個一維指針上分配N個元素 的空間,即成爲動態二維數組。和普通數組不同,這種動態二維數組的各行之間地址並不連續

         2、通過數組指針指向已有二維數組。

         對於已經定義好的M行N列數組,可以使用指向N個元素的數組指針,指向該數組並訪問。 

         如:

            int arr[3][4] = {0};

            int *p = &arr[0][0];

            *(p+i) = i;  //此時就用指針訪問了二維數組


        總結:

        在絕大多數表達式中,數組名的值是指向數組第1個元素的指針。這個規則有兩個情況例外:1.sizeof(數組名),這裏的數組名錶示的是整個數組。2.&數組名,這裏的數組名錶示整個數組。

         指針和數組並不相等,數組的屬性和指針的屬性大相徑庭。當我們聲明一個數組時,它同時也分配了一些內存空間,用來容納數組元素。但是當我們聲明一個指針時,它只分配了用於容納指針本身的空間。

         當數組名作爲函數參數傳遞時,實際傳遞給函數的是一個指向數組第1個元素的指針。函數所接收到的參數實際上是原參數的一份拷貝,所以函數可以對其操作而不會影響實際的參數。但是對指針參數執行間接訪問操作允許函數修改原來的數組元素。數組形參可以聲明爲數組,也可以聲明爲指針。這兩種聲明形式只有當它們作爲函數的形參時才相等。

            




        

    

    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章