查看完整版本 : 如何看三維陣列的元素?
自己試做一下三維陣列,想依序排出各元素,但顯然有點超出我的立體感:XD: 不知有無公式或方法去排出三維以上陣列各元素的順序位置?就是說a[0][0][0]是第一個元素,a[0][0][1]是第二個,然後呢?我做了一下,結果發現我以為的第三和四個元素,似乎並不存在,而是出現在我以為的第五和六的位置,而我以為是第七和八的元素,似乎也是不存在該位置??:teeth
thanks,
#include <stdio.h>
#include <conio.h>
int main(void){
int a[3][3][2]={
{100,200},{101,201},{102,202},
{300,400}, {301,401},{302,402},
{500,600},{501,601},{502,602}
};
printf("%d\n",a[0][0][0]);//100
printf("%d\n",a[0][0][1]);//200
printf("%d\n",a[0][1][0]);//0
printf("%d\n",a[0][1][1]);//0
printf("%d\n",a[1][0][0]);//101
printf("%d\n",a[1][0][1]);//201
printf("%d\n",a[1][1][0]);//0
printf("%d\n",a[1][1][1]);//0
return 0;
}
应该是书写的时候这样子:
int a[3][3][2]={{100,200,101,201,102,202},{300,400,301,401,302,402},{500,600,501,601,502,602}};
或者这样:
int a[3][3][2]={100,200,101,201,102,202,300,400,301,401,302,402,500,600,501,601,502,602};
这样也行:
int a[3][3][2]={{{100,200},{101,201},{102,202}},{{300,400},{301,401},{302,402}},{{500,600},{501,601},{502,602}}};
就是写成多层的话,第1级的不能超过3组。
应该是书写的时候这样子:
int a[3][3][2]={{100,200,101,201,102,202},{300,400,301,401,302,402},{500,600,501,601,502,602}};
或者这样:
int a[3][3][2]={100,200,101,201,102,202,300,400,301,401,302,402,500,600,501,601,502,602};
这样也行:
int a[3][3][2]={{{100,200},{101,201},{102,202}},{{300,400},{301,401},{302,402}},{{500,600},{501,601},{502,602}}};
就是写成多层的话,第1级的不能超过3组。
~yes:bow 我正在畫圖來加強了解。
http://i1371.photobucket.com/albums/ag289/anytime543/memory-location_zpsfb48deac.png
我發現陣列的寫法有無大括號有差別?
int a[3][3][2]={
{100,200},{101,201},{102,202},
{300,400}, {301,401},{302,402},
{500,600},{501,601},{502,602}
};
像上面裡面的陣列,把二個二個加上一個大括號,則答案就錯誤了。
我發現,要嘛只有一組大括號如:
int a[3][3][2]={
100,200,101,201,102,202,
300,400,301,401,302,402,
500,600,501,601,502,602
};
如果裡面想清楚一點標示,也要設大括號,則各列各組都要有,例如:
int b[3][3][2]={
{{100,200},{101,201},{102,202}},
{{300,400}, {301,401},{302,402}},
{{500,600},{501,601},{502,602}}
};
這樣算出來的答案才是正確的。
若是这样写的话
int a[3][3][2]={
{100,200},{101,201},{102,202},
{300,400}, {301,401},{302,402},
{500,600},{501,601},{502,602}
};
电脑理解成了:
int a[3][3][2]={
{100,200,0,0,0,0},{101,201,0,0,0,0},{102,202,0,0,0,0}
};
若是这样写的话
int a[3][3][2]={
{100,200},{101,201},{102,202},
{300,400}, {301,401},{302,402},
{500,600},{501,601},{502,602}
};
电脑理解成了:
int a[3][3][2]={
{100,200,0,0,0,0},{101,201,0,0,0,0},{102,202,0,0,0,0}
};
原來如此,十分感謝。~youarebe:
為何電腦會如此理解呢?
我後面還有{300,400}, {301,401},{302,402},
{500,600},{501,601},{502,602}難道它就忽略不計了嗎?
如果真是忽略不計,這幾個元素是否還是占了記憶體並且存在,只是不被算入這個陣列之中?
thanks
要想知道其它的值是否占用了记忆体:
printf("%d\n",sizeof(a));
看是否超过72就知道了
要想知道其它的值是否占用了记忆体:
printf("%d\n",sizeof(a));
看是否超过72就知道了
~yes
答案就是72而已,所以3x3x2x4(byte)=72byte,表示a[3][3][2]就只占用72byte。但
我後面打的那些例如{300,400}, {301,401},{302,402}, {500,600},{501,601},{502,602}會占到記憶體嗎?當然不會算在a陣列的頭上,只是說它們是否還是占用到了記憶體?
thanks
vBulletin® v3.8.4,版權所有 ©2000-2026,Jelsoft Enterprises Ltd.