C語言學習筆記 指標與陣列

2021-05-22 06:52:24 字數 1815 閱讀 2413

在c語言中,陣列與指標的關係非常密切,陣列下標所能完成的任何運算都可以用指標來實現;一般而言,指標運算比陣列下標運算的速度快,但用指標實現的程式理解起來稍微有一些難度;

一、指標與一維陣列

int a[10];               //定義了乙個大小為10的整型陣列a;

int *pa = &a[0];    //將指標pa指向陣列a的第0個元素,即pa的值為陣列元素a[0]的位址;

下標和指標運算有著很密切的關係,由於乙個陣列的名字即是該陣列第0個元素的位置,所以上面int *pa = &a[0]; 也可以寫成

int *pa = a; 兩者是等價的。

如果pa指向陣列a的某一特定元素,那麼pa+1指向該陣列中pa指向元素的下一元素,pa+i指向該陣列中pa所指向元素之後的第i個元素,pa-i指向該陣列中pa所指向元素之前的第i個元素(前提是pa±i都不會產生陣列下標越界);

如果pa指向a[0],那麼*(pa+1)表示陣列元素a[1]表示的內容,*(pa+i)表示陣列元素a[i]表示的內容;無論陣列a的元素有什麼樣的型別或者大小,上述結論都是正確的;

「 指標加一」的意思是pa所指向物件的下乙個物件,相應的,pa+i指向pa所指向物件之後的第i個物件,這可以推廣到所有的指標運算;

陣列和指標的區別:由於指標是乙個變數,所以pa=a或者pa++都是正確的;陣列名不是乙個變數,所以a=pa或者a++的語句是非法的;

二、指標與多維陣列

假設有整型二維陣列a[3][4]如下:

0 1 2 3

4 5 6 7

8 9 10 11

那麼a自身是乙個指向指標陣列的指標,該指標陣列中的每乙個指標指向陣列的一行;

*a+i給出的是陣列第一行中索引為i的元素的位址,*(*a+i)就是該元素儲存在該位址的值,等價於a[0][i];

相應的,*(a[1]+i)表示的是陣列第二行中索引為i的元素的位址,可以用 *(a[1]+i)進行提取,它等價於a[1][i];

a+i,a[i],*(a+i),&a[i][0]是等同的。 此外,&a[i]和a[i]也是等同的。因為在二維陣列中不能把&a[i]理解為元素a[i]的位址,不存在元素a[i]。c語言規定,它是一種位址計算方法,表示陣列a第i行首位址。由此得出:a[i],&a[i],*(a+i)和a+i也都是等同的。

把二維陣列a 分解為一維陣列a[0],a[1],a[2]之後,設p為指向二維陣列的指標變數。可定義為: int (*p)[4] 它表示p是乙個指標變數,它指向二維陣列a 或指向第乙個一維陣列a[0],其值等於a,a[0],或&a[0][0]等。而p+i則指向一維陣列a[i]。從前面的分析可得出*(p+i)+j是二維陣列i行j 列的元素的位址,而*(*(p+i)+j)則是i行j列元素的值。

二維陣列指標變數說明的一般形式為: 型別說明符 (*指標變數名)[長度] 其中「型別說明符」為所指陣列的資料型別。「*」表示其後的變數是指標型別。 「長度」表示二維陣列分解為多個一維陣列時, 一維陣列的長度,也就是二維陣列的列數。應注意「(*指標變數名)」兩邊的括號不可少,如缺少括號則表示是指標陣列,意義就完全不同了。

三、指標陣列

顧名思義,指標陣列就是乙個陣列元素都是指標的陣列(說破天也還是陣列);

指標陣列最頻繁的用處就是用來存放具有不同的字串,相比較字串陣列,指標陣列比較節省記憶體空間;

例項程式:

#include

void main();

int(*p)[4];

int i,j;

p=a;

for(i=0;i<3;i++)}}

程式輸出:01

2345

6789

1011

press any key to continue

C語言學習筆記 指標 指標陣列與陣列指標

指標陣列 是乙個陣列,陣列元素為指標 陣列指標 是乙個指標,指向陣列的指標 例如 int p1 5 int p2 5 對於語句int p1 5 因為 的優先順序要比 要高,所以 p1 先與 結合,構成乙個陣列的定義,陣列名為 p1,而 int 修飾的是陣列的內容,即陣列的每個元素。也就是說,該陣列包...

C語言學習筆記 指標 指標與一維陣列

int a 10 int p null p a 其中,陣列名a代表陣列的首位址 即 a 0 那麼表示式a i代表陣列中下標為i元素a i 的位址,即 a i 還可以通過使用間接定址 來引用陣列元素。例如 a i 表示取出首位址元素後邊第i個元素的內容,即下標為i的元素a i 此外,還可以通過一維陣列...

C語言學習筆記 陣列指標域指標陣列

一 指標陣列和陣列指標的記憶體布局 初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔 4 個位元組,至於它指向的...