指向分陣列的指標

2021-08-20 14:52:13 字數 1466 閱讀 1055

指標在c語言中具有舉足輕重的地位,而在陣列中尤其是多維陣列中的應用,更是讓人眼花繚亂。下面通過乙個小例子來簡單介紹一下二維陣列中的指標。

int a[3][5]=, , };

1. a , *a , **a ;

2. &a[0] , &a[1] , &a[0][0] , &a[1][3] ;

3. a+1 , a[0]+1 , a[1]+1 , a[1][2]+1 ;

4. *a+1 , *(a+1) , *(a+1)+3 , *(*(a+2)+3) ;

5. *(a[2]+3) ;

首先說明一下陣列元素下標"[ ]"是變址運算子,相當於*(  +  ),即a[2]=*(a+2)。

1、首先是第一組,a是二維陣列名,它表示指向0號分陣列的指標常量,對應的位址位元組值是該二維陣列的首位址位元組值。*a表示0行分陣列名,等價於*(a+0),即為a[0],位址位元組值依然是該二維陣列的首位址位元組值。但a和*a並不等價,它們的基型別位元組數不同。在dev c++編譯環境中,語句printf("%d,%d,%d\n",sizeof(a),sizeof(*a)),輸出的結果為60,20。所以它們的基型別位元組數分別為60,20。

2、「 & 」是「取位址」運算子,所以&a[0]表示「取0行分陣列的位址」,而a作為二維陣列名,恰好是指向0號分陣列的指標常量,所以 &a[0]=a ;同理,&a[1]表示「取第1行分陣列的位址」,&a[0][0]表示「取0行0列元素所在的位址」,&a[1][3] 表示「取1行3列元素所在的位址」。

3、a表示「0行分陣列的位址」,那麼a+1表示「第1行分陣列的位址」,等價於&a[1];a[0]是0行分陣列名,表示「0行0列元素的位址」,那麼a[0]+1表示「0行1列元素的位址」,等價於&a[0][1]。同理,a[1]+1表示「1行1列元素的位址」。a[1][2]表示「1行2列的元素」,a[1][2]+1表示這個元素本身的值+1。

4、前面講到,*a表示0行分陣列名,它表示「0行0列元素的位址」,則*a+1表示「0行1列元素的位址」。a+1是「1行分陣列的位址」,則*(a+1)表示「1行0列元素的位址」,printf("%x,%x\n",a+1,*(a+1))這條語句輸出的兩個位址值是一樣的,說明1行分陣列的位址的確是0號元素所在的位址。若在*(a+1)前再加乙個*,那麼表示取該位址所表示的值,即**(a+1)=6。同理,*(a+1)+3表示「1行3列元素的位址」,*(*(a+2)+3)表示「2行3列元素的值」。

5、層層剖析,a[2]表示第2行陣列名,a[2]+3表示「2行3列元素所在的位址」,*(a[2]+3)表示「2行3列元素的值」,所以*(a[2]+3)=*(*(a+2)+3),因為一開始我們就提到a[2]=*(a+2)。

【總結】:

指向多維陣列元素的指標變數與指向基型別的指標變數相同。

指向多維陣列的分陣列的指標變數,應該指向整個一級分陣列,基型別位元組數為一級分陣列所佔位元組數。

當對上述例子中的a進行+1操作時,是對a的下一級分陣列進行+1;對a進行*運算時,表示進入下一級分陣列。

指向陣列的指標

陣列 array 是一系列具有相同型別的資料的集合,每乙份資料叫做陣列元素 element 陣列中的所有元素在記憶體中是連續排列的,整個陣列占用的是一塊記憶體。定義陣列時,要給出陣列名和陣列長度,陣列名可以認為是乙個指標,它指向陣列的第0個元素。在c語言中 我們將0個元素的位址稱為陣列的首位址。in...

指向陣列的指標

乙個陣列儲存在一塊連續記憶體單元中 陣列名就是這塊連續記憶體單元的首位址 第 i 1 個陣列元素的位址可表示為 data i 或 data i 可以通過以下方式為指向陣列的指標賦值 int a 10 pa a 0 或者pa a 乙個指標變數可以指向乙個陣列元素。int ptr,data 10 ptr...

指標 陣列指標 指標陣列 指向指標的指標

程式中一般通過變數名對變數進行訪問操作,其實質是通過位址進行的。對變數的訪問分為直接訪問和間接訪問,如語句 printf d i 執行的時候,根據變數名 與位址的對應關係,找到i的位址,依次取相應的位元組數中的資料 即i的值 把它輸出。這種按照變數位址訪問變數值的方式成為直接訪問 還可以將變數i的位...