2015-09-23 35 views
0
int array[] = {2, 3, 4, 6}; 
int array[6] = {2, 3, 4, 6}; 
int array[MAX_SIZE] = {2, 3, 4, 6}; 

在第一個語句中,我沒有提到數組可以容納的元素數量。第二個陣列可以容納6個元素,第三個陣列也可以容納6個元素。當我用sizeof(array)來確定大小。第一個陣列的大小是16.第二個和第三個分別有24個。不使用MAX_ELEMENTS對數組進行初始化會更好嗎?

爲什麼我不喜歡第一個?正如它使用內存一樣,它也是它所具有的元素之一。而在第二和第三的情況下,我首先告訴沒有。它可以容納的元素和大小變成24.另外,我不能使用那個內存來做其他工作。

使用malloc(6 * sizeof(int))進行初始化的另一種方式,請致電free(array)。這將允許我使用未使用的內存。但爲什麼我應該這樣做,因爲array[]使用內存作爲它的元素。 malloc也做同樣的事情,但它很容易編寫和記憶array[]

+1

那麼,你想要一個長度爲4或長度爲6的數組嗎? – juanchopanza

+0

問題並不清楚。 – ouah

+0

爲什麼array []不應該喜歡? –

回答

2

問:在不使用MAX_ELEMENTS的情況下初始化數組是否更好?

答:這取決於你想做什麼!


使用此:

int array[] = {2, 3, 4, 6}; 
當你想數組有一樣多的細胞在初始化過程中的元素

。請注意,int array[4] = {2, 3, 4, 6};是等效的。

使用此:

int array[6] = {2, 3, 4, 6}; 
當你知道你將需要更多的細胞,會在初始化處理後得到填補

此:

int array[MAX_SIZE] = {2, 3, 4, 6}; 

相當於上述情況下,當MAX_SIZE = 6


您應該檢查這一點:

Difference between static memory allocation and dynamic memory allocation

,這一次爲sizeof()操作:

How do I determine the size of my array in C?


所以,如果你確切地知道有多少元素你的數組將使用靜態內存ory分配,如果您不知道,請使用動態內存分配。

+0

我可以添加元素數組[]?在我初始化它之後。 –

+0

@HemantParihar如果你沒有做太多的工作(這將是昂貴的),然後沒有。如果你想添加更多的元素,你可能需要考慮動態內存分配。請檢查我的編輯!順便說一句,我明白你的困惑,因此我贊成你的問題。 – gsamaras

+0

我做了一個程序來插入元素(5)到數組[] = {3,4,6},我成功地插入它。所以當我需要插入我可以和它的大小增加爲根據沒有。的元素。正如你所說,我應該更喜歡動態內存分配插入元素。所以爲什麼我更喜歡動態內存分配插入,因爲我可以用靜態內存分配來做同樣的事情。 –

0

我想你會被sizeof運算符弄糊塗,並且假設你得到的數字16是數組的元素個數。這不是真的。 sizeof運算符爲您提供了以字節爲單位傳遞的對象的大小(低層意義上而非面向對象)。所以,你得到16個字節,這意味着4個元素,因爲一個int有4個字節。

0

答案取決於你打算如何使用數組。

如果數組在編譯時將包含一組已知元素並且僅包含那些元素,則不指定大小。然後,如果你通過數組需要循環您可以使用此語法:如果你想添加或刪除列表中的元素

for (i = 0; i < sizeof(array)/sizeof(array[0]); i++) 

,上述說法並不需要改變。

如果數組的大小與其初始元素的大小無關,或者數組未初始化或部分初始化,那麼您將指定大小。