個人對二級指標與二維陣列的理解

2021-10-01 17:00:10 字數 2012 閱讀 5013

在理解二級指標與二維陣列的關係時,我們先來回顧一下一維陣列與指標的關係:一維陣列是由已知數目的相同型別的元素組合而成,每個元素依次連續排列在記憶體某乙個空間中,因此每相鄰兩個元素的位址相差為同乙個常數。陣列名就是該陣列的位址,陣列取第乙個元素的位址作為位址。此時我們可以用指標訪問一維陣列。實現過程如下:

#includeint main(void)

; int* p=null;

int i=0;

p=a;

printf("&a[i]:");

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

printf("%d ",&a[i]);

printf("\np+i:");

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

printf("%d ",p+i);

printf("\na[i]:");

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

printf("%d ",a[i]);

printf("\np[i]:");

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

printf("%d ",p[i]);

printf("\n*(p+i):");

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

printf("%d ",*(p+i));

return 0;

}

&a[i]:921511572 921511576 921511580 

p+i:921511572 921511576 921511580

a[i]:0 0 0

p[i]:0 0 0

*(p+i):0 0 0

從上面我們可以得出一些結論:&a[i]與p+i等價,p[i]與a[i]與(*(p+i))等價。且在數值上a=&a[0], a[i]=*(p+i)

現在我們來回顧二維陣列:

#include int main(void)

, ,

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

for(j=0;j<3;++j)

printf(" board[%d][%d]: %c\n", i,j,*(*(board+i)+j));

return 0;

}

執行結果:

board[0][0]: 1      board[0][1]: 2        board[0][2]: 3

board[1][0]: 4       board[1][1]: 5       board[1][2]: 6

board[2][0]: 7       board[2][1]: 8       board[2][2]: 9

此時在數值上*board=board=board[0] = &board[0][0]=&board[0]=第乙個元素的位址。board[0]相當於是每乙個一維陣列的陣列名!

那麼用malloc建立的「二維陣列」是否具有這樣的特性嗎?

malloc建立「二維陣列」的實現過程如下:

#include #includeint main(void)

, ,

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

printf(" board: %c\n",*(*board+i)); //board一定要加星號!*board相當於是*(board+0)=board[0]

return 0;

}

執行結果:

board[0][0]: 1      board[0][1]: 2        board[0][2]: 3

board[1][0]: 4       board[1][1]: 5       board[1][2]: 6

board[2][0]: 7       board[2][1]: 8       board[2][2]: 9

二維陣列與二級指標

今日在論壇上看到有人問到指標 級指標和二維陣列 我們知道char array abcdef array是陣列的首位址,那麼在二維陣列中array當然也是陣列的首位址,看看這個定義char array 3 怎麼知道的呢?定義這樣乙個陣列,在vc除錯視窗中 我們看到 array 0x64324234 a...

二級指標與二維陣列

include 輸入輸出標頭檔案。include 本程式需要用到malloc free函式,引用該標頭檔案。int main 定義二維陣列a,並賦值從1 12.int p null 定義二維指標。int i,j p int malloc sizeof int 3 要訪問的陣列有三行,所以申請三個一維...

二維陣列與二級指標

首先,記憶體是連續的,二維陣列中的資料塊在記憶體中也是一塊連續的順序的儲存的空間。二維陣列名相當於指標,但是它指向的是乙個陣列型別。int a 4 5 那麼二維陣列a 在記憶體中的分配應該是順序分配 5 5 5 5 此處 5 表示乙個長度為5的一維陣列 二維陣列名 a 指向一維陣列a 0 a相當於乙...