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

來源:互聯網
上載者:User

標籤:而不是   輸出   指派陳述式   個數   學習筆記   ack   相同   等價   blank   

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

    這種指標變數的定義與以前介紹的指向變數的指標變數相同。應當注意,如果數組為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、實參為指標變數,形參為數組名。

  

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.