1樓:匿名使用者
從二維陣列的角度來看,a是二維陣列名,a代表整個二維陣列的首地址,也是二維陣列0行的首地址a+1代表第一行的首地址。
int a[3][4]=,,}
設陣列a的首地址為1000。
a[0]是第一個一維陣列的陣列名和首地址,因此也為1000。*(a+0)或*a是與a[0]等效的, 它表示一維陣列a[0]0 號元素的首地址,也為1000。&a[0][0]是二維陣列a的0行0列元素首地址,同樣是1000。
因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
同理,a+1是二維陣列1行的首地址,等於1008。a[1]是第二個一維陣列的陣列名和首地址,因此也為1008。&a[1][0]是二維陣列a的1行0列元素地址,也是1008。
因此a+1,a[1],*(a+1),&a[1][0]是等同的。
由此可得出: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[0]也可以看成是a[0]+0,是一維陣列a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維陣列a[i]的j號元素首地址,它等於&a[i][j]。
簡單來說,a+0,&a[0][0]為地址值。而a[0]為儲存在此地址的數值。
2樓:陳宗權
對於二維陣列int a[m][n],表示的是一個有m個元素的陣列,每個元素是一個行,也就是一個int[n]型別的資料。
a+i等同於&a[i],表示「第i個元素也就是第i行」的地址,是一個「包含n個int元素的陣列」的地址。
a[i]等同於&a[i][0]表示「第i個元素也就是第i行」,由於本身一行也是一個陣列,所以也可以說它表示這一行第0個元素的地址,也就是&a[i][0],是「一個int元素」的地址。
這就是他們的意義的不同。
根據意義不同再來看運算,
前者加*也就是*(a+i)表示的是一個「包含n個int元素的陣列」,
後者加*也就是*a[i]或者*&a[i][0]表示的是「一個int元素」;
對前者+1前進的是一個「包含n個int元素的陣列」那麼遠,
對後者+1前進的是「一個int元素」那麼遠。
ps:上面的i全部寫成0就是你問的內容,但i可以是從0到m-1的任意整數。
3樓:匿名使用者
如果陣列是a[x][y]這樣的話,a+0的資料型別是 int **,a[0]的資料型別是int*,&a[0][0]的資料型別是int*,這就是意義的不同之處。參與運算時,由於資料型別不同,取值方式就不同,a+0需要**運算,a[0]和&a[0][0]需要*運算
4樓:橙子
推薦你看看林躍的高質量程式設計
c語言二維陣列問題
寫完以後我發現有點長,樓主給點耐心看,不懂我們再交流 a是整個二維陣列的首地址,short長度為2,sizeof a 2 5 5 50 a 1指向二維陣列的第二個元素,它僅僅是一個指標,如果在a 1前面加一個 號,就是第二個元素的值,即a 0 1 所以,a 1是一個指標,它指向二維陣列中的某個數,指...
關於C語言定義二維陣列的問題,c語言關於定義二維陣列的問題
以下能正確定義二維陣列的是 以下能正確定義 陣列的是 去掉二維兩字 a int a 3 語法錯,沒帶初始化,不允許用 空白 不允許 陣列大小不定。b int a 正確定義了陣列,是一維陣列,陣列元素只有1 個,初始化數值為 2 3 就是 6。c int a 3 語法錯,花括號裡沒填初始化數值。d i...
c語言求二維陣列的和的寫法問題,c語言求二維陣列的和的一個寫法問題
周綝 這樣寫,格式有點小錯誤。以下幫你加了幾個中括號,希望採納!note your choice is c ide include stdio.h void main for i 0 i 2 i for j 0 j 2 j if a i j max max a i j printf d,d,d n ...