C語言中sizeof 與一維陣列和二維陣列 - tw511教學網
文章推薦指數: 80 %
C語言中sizeof 與一維陣列和二維陣列. ... 對陣列名用sizeof表示求這個陣列在記憶體中所佔空間總的大小,結果爲4*10=40 printf("sizeof(a[0])= %d\n", ...
技術文章»C語言中sizeof與一維陣列和二維陣列
C語言中sizeof與一維陣列和二維陣列
2020-08-0812:41:40
sizeof與陣列的關係,之前困惑了很久,搞清楚後在這裏記錄一下,防止後面再遺忘了。
inta[10]={1,2,3,4,5,6,7,8,9,10};
intb[2][3]={0};
printf("sizeof(a)=%d\n",sizeof(a));
//對陣列名用sizeof表示求這個陣列在記憶體中所佔空間總的大小,結果爲4*10=40
printf("sizeof(a[0])=%d\n",sizeof(a[0]));//求陣列第一個元素的大小,結果爲4
printf("sizeof(*a)=%d\n",sizeof(*a));//這裏需明白陣列名錶示的是陣列第一個元素的首地址
//即a=&a[0],所以*a=a[0],結果同sizeof(a[0]),也爲4
printf("sizeof(&a[0])=%d\n",sizeof(&a[0]));//表示求元素a[0]的地址所佔空間大小,
//或者說求在本64位元編譯系統(VS2017x64)中用多少位元組來表示一個地址,結果爲8
//而對32編譯系統(VS2017Win32)結果則爲4
printf("sizeof(&a[1])=%d\n",sizeof(&a[1]));//表示求元素a[1]的地址所佔空間大小,結果也爲8
//對於64位元的編譯系統,恆用8個位元組表示一個地址,即求地址的sizeof恆爲8
printf("*(&a[1]+1)=%d\n",*(&a[1]+1));//對於地址的加減,其移動的大小取決於地址中元素的大小
//這裏地址&a[1]中的元素a[1]爲4個位元組,故加1後向後移動四個位元組,其內容爲a[2],結果爲3。
printf("*(&a[1]-1)=%d\n",*(&a[1]-1));//在地址&a[1]基礎上向前移動四個位元組,結果爲a[0]=1。
printf("sizeof(&a[1]+1)=%d\n",sizeof(&a[1]+1));
//&a[1]+1表示元素a[2]的地址,即&a[2],求地址的sizeof結果恆爲8
printf("sizeof(a+1)=%d\n\n",sizeof(a+1));//陣列名錶示的是陣列第一個元素的地址(即a=&a[0])
//加1後向後移動4個位元組即a+1=&a[1],求其sizeof結果爲8
//對於二維陣列首先要明白二維陣列b[M][N]會被系統解釋爲長度爲M一維陣列
//然後這個一維陣列的每個元素又是長度爲N的一維陣列。
//如元素b[0][N]爲長度爲N的一維陣列,b[0]是該陣列的陣列名。
所以二維陣列又稱爲陣列的陣列
printf("sizeof(b)=%d\n",sizeof(b));//對二維陣列名用sizeof表示求這個陣列在記憶體中
//所佔空間總的大小,結果爲(2*3)*4=24
printf("sizeof(b[0][0])=%d\n",sizeof(b[0][0]));//求二維陣列中第一個元素的大小
//(通常意義上的第一,並不是系統理解的第一個元素爲b[0]),其型別爲int,結果爲4
printf("sizeof(b[0])=%d\n",sizeof(b[0]));//b[0]被系統解釋爲長度爲3的一維陣列
//b[0]爲該陣列的陣列名,對陣列名用sizeof表示求這個陣列總的大小,結果爲3*4=12
printf("sizeof(b[1])=%d\n",sizeof(b[1]));
//b[1]同樣被系統解釋爲長度爲3的一維陣列,b[1]爲該陣列的陣列名,結果爲3*4=12
printf("sizeof(b[0]+1)=%d\n",sizeof(b[0]+1));//陣列名錶示陣列第一個元素的首地址
//所以b[0]=&b[0][0]。
地址的加減,其移動大小取決於地址中元素b[0][0]的大小(爲4個位元組)
//地址&b[0][0]往後移動4個位元組爲地址&b[0][1]。
所以b[0]+1=&b[0][1],求其sizeof結果爲8
printf("sizeof(b+1)=%d\n",sizeof(b+1));//陣列名錶示陣列第一個元素的首地址,所以b=&b[0]。
//地址的加減,其移動大小取決於地址中元素b[0]的大小(爲12個位元組)
//地址&b[0]往後移動12個位元組爲地址&b[1]。
所以b+1=&b[1],是一個地址,求其sizeof結果爲8
printf("sizeof(*b)=%d\n",sizeof(*b));//b=&b[0],所以*b=b[0],同sizeof(b[0]),結果爲12
延伸文章資訊
- 1二維陣列 - C/C++
在電腦的記憶體排列方式上,二維的陣列本質上仍為一維陣列,只是使用較合於 ... 我們要宣告一個二維的整數型態陣列d,其y軸方向大小為10;x軸方向大小為20,其形式應該 ...
- 2C語言二維陣列行數和列數計算- C語言零基礎入門教程 - 程式人生
一.計算一維陣列長度. 在前面很多文章都介紹了關於普通陣列計算長度的方式,再次重複一下:對於 type array[A] 形式的陣列,可以通過計算 sizeof 獲取 ...
- 3C語言中sizeof 與一維陣列和二維陣列 - tw511教學網
C語言中sizeof 與一維陣列和二維陣列. ... 對陣列名用sizeof表示求這個陣列在記憶體中所佔空間總的大小,結果爲4*10=40 printf("sizeof(a[0])= %d\n"...
- 4c++語言如何計算二維陣列行數和列數 - 程式人生
c++語言如何計算二維陣列行數和列數. 阿新• • 發佈:2019-02-17. 對於一個二維陣列如: int a[2][5]; 求陣列元素的總數: sizeof(a) / sizeof(int...
- 5c語言中如何獲取二維陣列的行列數 - 多學網
1樓:匿名使用者. 有兩bai種方式:. 1 二維. 陣列的行列數在定du義的zhi時候就是確定好的,所以. dao程式設計人員是知道二維內陣列的大小以容及行列數 ...