程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言-C語言二維數組內存是怎麼分配的?

c語言-C語言二維數組內存是怎麼分配的?

編輯:編程解疑
C語言二維數組內存是怎麼分配的?

為什麼這段代碼的執行結果是這樣?

    int (*a)[2];
    int b[2][2];    
    printf("size of first element of b is %d\n",sizeof(b[0][0])) ;
    a = b;
    printf("size of first element of a is %d",sizeof(a[0][0])) ;

size of first element of b is 4
size of first element of a is 40

最佳回答:


二維數組在內存中其實是一個平坦的一維數組,下面具體說明:
int arr[3][5] 和 int arr[15] 所使用的內存區大小是一樣的,都是15*sizeof(int)個字節。
如果你做下面這樣一個定義:
union{
int a[3][5];
int b[15];

}U;

你會發現
U.a = &U.b
U.a[0] == &U.b[0]
U.a[1] == &U.b[5]
U.a[2] == &U.b[10]
&U.a[2][3] == &U.b[13]

規律是: &U.a[m][n] == &U.b[m*5+n],其中5就是數組a的第二維度。
實際上,二維數組在運行時也是用這樣的公式轉化為對一維數組的訪問。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved