C語言之陣列和指標

2021-08-04 04:35:36 字數 2483 閱讀 7244

如下便定義了乙個一維陣列:

int arry[10];

該陣列的維度為1,大小為10,包含了10個元素,從arry[0]~arry[9]共10個資料元素,每個資料元素都是int型別,類似的可以定義其他資料型別的陣列,訪問陣列時,可以通過值在0~9的下標i訪問陣列中的第i+1個資料元素。

一維陣列在初始化時,用花括號的方式將初始化元素包含在內即可,未被初始化的元素其值被預設置為0。c99之前,若要初始化第i個元素,則必須要求初始化i個元素之前的元素,如,若要初始化陣列arry中的第5個資料元素,則必須要初始化第5個資料元素之前的所有元素,即:

int arry[10]=;

未被初始化的剩餘元素全部置為0。c99引入了指定初始化器,可以對陣列中的特定元素進行初始化,而不必像上面那樣必須初始化之前的元素,同上面的例子,如要初始化第5個資料元素,可以採用下面的方式:

int arry[10]=;

進行這樣的初始化之後,其餘元素都被置為了預設值0。

在訪問陣列元素時,c語言對於訪問下標越界的陣列元素的行為是未定義的,若訪問arry[10]或arry[-1],有的編譯器可能不會報錯,這源於c語言對程式設計師的信任,認為程式設計師有責任確保陣列不越界,所以不會報錯,但這樣可能會修改儲存空間中其他元素的值,造成意想不到的後果。另外只有在定義陣列並進行初始化時才可以用「」進行初始化,否則不能用「」進行初始化。

如下便定義了乙個二維陣列:

int arry[2][2];

該陣列的維度為2,大小為2x2,即2行2列的陣列,包含了4個元素,從arry[0][0]、arry[0][1]、arry[1][0]、arry[1][1],每個資料元素都是int型別,類似的可以定義其他資料型別的陣列,訪問陣列時,可以通過值在0~1的行下標i,和列下標j訪問陣列中的第i+1行,第j+1列的資料元素。

對於二維陣列arry[m][n](m和n分別代表行數和列數),在初始化時,可以將每個arry[i](0int main(void)

,,,}; //靜態陣列,一般陣列

int arry2[2][3]=,};

showarry(4,2,arry1); //輸出一般陣列

showarry(2,3,arry2); //輸出一般陣列

return 0;

}void showarry(int rows,int cols,int arry[rows][cols]) //該函式由於採用了邊長陣列,因此可以處理一切大小的陣列

; int *p2=(int [2]),,};

這樣就建立了乙個長度為2的陣列字面量和3x2大小的陣列字面量,並可以通過p1、p2指標引用他們。

###定義

指標就是變數物件在記憶體空間中的位址,c中可以定義指標變數來訪問某個變數,這樣的訪問方式稱之為間接訪問,指標變數中的值是所指向變數的位址,通過&可以取得某個變數的位址,通過可以獲得某個變數位址上這個變數的值。每個指標變數都有型別,都指向特定型別的變數。

int n=3;

int p=&n;

p=2;

定義了乙個值為3的變數和乙個指向整型變數的指標,通過&使得p指標指向了變數n,然後通過p獲得該變數的值。這裡的p指標變數是乙個指向int型別的指標,若換成其他型別的指標,則會報錯。

###陣列的指標表示法

陣列和指標實際上是等價的,陣列名相當於陣列的起始位址,可以通過陣列本身帶下標的方式或者指標方式來對陣列元素進行訪問。

在使用陣列的指標表示法時,若是一維陣列可以採用(arry+i)的方式訪問arry[i],若是二維陣列,可以採用(*(arry+i)+j)的方式訪問arry[i][j]。

###指向一維陣列和二維陣列的指標

定義指向一維陣列的指標時,可以採用 type *p的方式進行定義,但在定義二維陣列的指標時,要指明陣列第二維的維度,採用type (*p)[cols]的方式定義二維陣列指標。

在定義高維陣列指標時,類似的需要指明除第一維外其餘維度的維度資訊。採用type (*p)[ ][dim2][dim3]…[dimn]。

##const陣列及指標

c為了防止更改陣列或者指標指向的元素,使用const限定符防止此類事情的發生。

const陣列:

const type arry[dim1][dim2]…[dimn]=;

const指標:

const type *p;

以上定義了乙個const陣列和乙個const指標,const陣列中的元素不能進行更改,且在定義的時候必須初始化。const指標表明不能通過指標改變所指向元素的值,但可以改變指標的指向,如果採用下面的定義方式:

type *const p;

則不能改變p指標的指向,但可以改變指標所指元素的值。

您的贊助將是我不斷創作的最大動力,謝謝支援!!!

如果您覺得我的文章對您有幫助,可以通過以下方式進行讚賞:

c語言之陣列指標

在c語言裡,陣列就是指標,指標就是陣列,一維指標就是一維陣列,二維指標就是二維陣列。陣列名就是陣列的首位址,所以形參是陣列的時候,必須把陣列的個數也帶過去 陣列一般通過下標訪問,下標偏移就是位址偏移。可以把一級指標指向一維陣列的首位址。除此之外,指標比陣列更為靈活。陣列在定義的時候必須指定長度個數,...

C語言之指標陣列

指標數值是什麼,有什麼用?通俗的講,指標變數和普通變數的理解差不多,只不過是指標變數儲存的是變數的位址,而普通變數儲存的是值。指標在什麼時候會使用到 傳遞和偏移兩個環節中 使用指標應該注意的事項 使用指標之前應該對其初始化 初始化已經宣告的位址 指標不能賦值具體值 指標所代表的是位址,而不是具體值 ...

C語言之指標陣列

一.指標陣列 1.簡介 簡介 本質是乙個陣列,但是裡面存放的資料都是指標,即陣列元素都是指標。它是 儲存指標的陣列 的簡稱。2.內容格式 資料型別 陣列名 元素個數 例如 int a 4 的優先順序比我們的 的優先順序高,所以與我們的4先結合,形成了我們的陣列的定義,陣列名叫做a,我們平時定義陣列的...