C語言學習筆記 (004) - 數組名和數組首地址(轉)


一個變量有地址,一個數組包含若干元素,每個數組元素都在內存中占用存儲單元,它們都有相應的地址。指針變量既然可以指向變量,當然也可以指向數組和數組元素(把數據起始地址或某一元素的地址放到一個指針變量中)。所謂數組的指針是指數組的起始地址,數組元素的指針數組元素的地址。

    這種指針變量的定義與以前介紹的指向變量的指針變量相同。應當注意,如果數組為int型,則指針變量亦應指向int型。

    C語言規定數組名代表數組的首地址,也就是第一個元素的地址。因此,下面兩個語句等價:

p=&a[0];

p=a;

    注意數組a不代表整個數組,上述"p=a;"的作用是"把a數組的首地址賦給指針變量p",而不是"把數組a各元素的值賦給p"。

    在定義指針變量時可以賦給初值:

int*p=&a[0];

它等效於:

int*p;

p=&a[0];

當然定義時也可以寫成

int*p=a;

    它的作用是將a的首地址(即a[0]的地址)賦給指針變量p(而不是*p)。

    假設p已定義為指針變量,並已給它賦了一個地址,使它指向某一個數組元素。

    如果有以下賦值語句: *p=1; 表示對P當前所指向的數組元素賦以一個值(值為1)。

    C規定對p+1指向數組的下一個元素(而不是將p值簡單地加1)。

    如果p的這初值為&a[0],則: (1)p+i和a+i就是a[i]的地址,或者說,它們指向a數組的第i個元素。 (2)*(p+i)或*(a+i)是p+i或a+i所指向的數組元素,即a[i]。 (3)指向數組的指針變量也可以帶下標,如p[i]與*(p+i)等價。

    根據以上敘述,引用一個數組元素,可以用: (1)下標法,如a[i]形式; (2)指針法,如*(a+i)或*(p+i)。

    要輸出各元素的值有三種方法: ○1下標法 ○2通過數組名計算數組元素地址,找出元素的值。 ○3用指針變量指向數組元素。

    對三種方法的比較: (1)第1、2種方法執行效率是相同的。 (2)第3種方法比1、2法快,用指針變量直接指向元素,不必每次都重新計算地址,像 p++這樣的自加操作是比較快的。 (3)用下標法比較直觀,能直接知道是第幾個元素。用地址法或指針變量的方法不直觀,難以很快地判斷出當前處理的是哪一個元素。

    在使用指針變量時,有幾個問題要注意: 1、指針變量可以實現使本身的值改變。 2、要注意指針變量的當前值。 3、雖然定義數組包含10個元素,用p指向數組元素,但批針變量可以指到數組以后的內存單元。 4、注意指針變量的運算。

    因此,用數組名作實參,在調用函數時實際上是把數據的首地址傳給形參(注意,不是把數組的值傳給形參)。

    請注意,在調用函數后,實參數組的元素值可能會發生改變,這種值的變化實際上並不是從形參傳回實參的,而是由於形參與實參數組共享同一段內存而造成的。

    如果有一個實參數組,想在函數中改變此數組的元素的值,實參與形參的對應關系有以下4種情況: 1、形參和實參都用數組名。 2、實參用數組名,形參用指針變量。 3、實參形參都有指針變量。 4、實參為指針變量,形參為數組名。

 
 


免責聲明!

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



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