網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   如何看三維陣列的元素? (https://www.domainclub.org/showthread.php?t=36807)

哈啦 2014-06-30 08:59 PM

如何看三維陣列的元素?
 
自己試做一下三維陣列,想依序排出各元素,但顯然有點超出我的立體感: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;
}

yumi 2014-07-01 01:21 PM

应该是书写的时候这样子:
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组。

哈啦 2014-07-01 02:15 PM

引用:

作者: yumi (文章 192866)
应该是书写的时候这样子:
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/...psfb48deac.png

哈啦 2014-07-02 01:57 PM

我發現陣列的寫法有無大括號有差別?
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}}
};

這樣算出來的答案才是正確的。

yumi 2014-07-02 07:16 PM

若是这样写的话
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}
};

哈啦 2014-07-02 07:49 PM

引用:

作者: yumi (文章 192885)
若是这样写的话
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

yumi 2014-07-02 10:13 PM

要想知道其它的值是否占用了记忆体:
printf("%d\n",sizeof(a));
看是否超过72就知道了

哈啦 2014-07-02 10:26 PM

引用:

作者: yumi (文章 192887)
要想知道其它的值是否占用了记忆体:
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


所有時間均為 +8。現在的時間是 01:47 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.