1樓:匿名使用者
寫完以後我發現有點長,樓主給點耐心看,不懂我們再交流~
a是整個二維陣列的首地址,short長度為2,sizeof(a)=2*5*5=50;
a+1指向二維陣列的第二個元素,它僅僅是一個指標,如果在a+1前面加一個*號,就是第二個元素的值,即a[0][1],所以,a+1是一個指標,它指向二維陣列中的某個數,指標只佔四個位元組。再舉個例子,比如a+5, 則指向的是第六個元素,sizeof(a+5)同樣等於四,而不是樓上說的是50+1的後果,這個是可以驗證的;
a是指向二維陣列的首地址,如果我們把二維陣列看成行列陣的話,*a則是第一行的首地址,這時候,sizeof(*a)相當於問第一行的元素一共佔用多少個位元組的記憶體?答案就是5個元素乘以每個元素佔兩個位元組啦;
上面我們剛剛說了,*a是第一行的首地址,+0表示指向第一個元素,所以,這時候,跟sizeof(a+1)完全是一個意思,它已經變成指向一個short的指標了,也等於4;
sizeof(**a)明白了就不說了~
2樓:匿名使用者
樓上是錯的。
sizeof(a) = 50 —— sizeof(陣列名) 是求陣列佔用的記憶體位元組數
sizeof(a+1) = 4 —— a+1 已經不是陣列名,而是指標,sizeof(指標) 結果必然為 4
sizeof(*a) = 10 —— *a 就相當於 a[0],a[0] 也是一個長度為 5 的陣列,2*5 = 10
sizeof(*a+0) = 4 —— *a+0 結果是指標
sizeof(**a) = 2 —— **a 結果為 short 型別,所以為 2 位元組
3樓:
sizeof(a) = 50 a的實際大小sizeof(a+1) = 4 相當於sizeof(50+1) ,50+1是一個int型
sizeof(*a) = 10 取a的首地址的值,因為是二維陣列,所以相當於第一個a[0][5]
sizeof(*a+0) = 4 同樣的,取a[0]的地址+0,相當於指標
sizeof(**a) = 2 取a[0][0]的值
4樓:匿名使用者
其他幾項都很簡單,樓上的已經說明白了,就第二項sizeof(a+1)我發表一下看法
a[1] = *(a+1)相信這個大家都知道,進而,&a[1] = &*(a+1) = a+1
由上面表示式可知道a+1就是a[1]的地址,a[1]是一個一位陣列,長度為5,a[1]的地址本質是一個指標,指向a[1],畫出記憶體圖就能很清楚的看出來
C語言的問題關於二維陣列的
從二維陣列的角度來看,a是二維陣列名,a代表整個二維陣列的首地址,也是二維陣列0行的首地址a 1代表第一行的首地址。int a 3 4 設陣列a的首地址為1000。a 0 是第一個一維陣列的陣列名和首地址,因此也為1000。a 0 或 a是與a 0 等效的,它表示一維陣列a 0 0 號元素的首地址,...
C語言問題。定義二維陣列,C語言問題。定義一個二維陣列
ok洛陽水席 include int main sum 0 for i 0 i 5 i return 0 樓主基本沒有大錯誤,只是不夠仔細,用來儲存特定值的變數使用前一定要初始化,如本例中的最大值,最小值,下標,都是必須初始化的!整型與整型運算會得到整型,1 2 0,5 4 1 系統會捨去小數部分。...
關於C語言定義二維陣列的問題,c語言關於定義二維陣列的問題
以下能正確定義二維陣列的是 以下能正確定義 陣列的是 去掉二維兩字 a int a 3 語法錯,沒帶初始化,不允許用 空白 不允許 陣列大小不定。b int a 正確定義了陣列,是一維陣列,陣列元素只有1 個,初始化數值為 2 3 就是 6。c int a 3 語法錯,花括號裡沒填初始化數值。d i...