2012-04-19 138 views
7

我正在使用malloc()製作一個帶有int*數據類型的動態數組。但問題是:如何知道數組的末尾?沒有一個相當於\0的數據類型爲int*,那麼,該怎麼做?傳遞大小作爲函數的參數?我希望你明白這一點。任何幫助非常感謝。如何知道int *數組的結尾?

+0

你正在使用malloc()glob像malloc(sizeof(int)* ELEMENTS)的一些內存我想。然後,您確實知道ELEMENTS的大小,您可以保存該變量並將其傳遞給您的函數。 – 2014-03-28 15:29:52

回答

11

C不像其他語言那樣管理數組長度。

你可能會考慮這個結構:

typedef struct t_thing { 
    int* things; 
    size_t count; 
} t_thing; 

使用:

t_thing t = { (int*)malloc(sizeof(int) * n), n }; 
8

對於整數,沒有與「\0」等價的「官方」,但您當然可以使用自己的價值。例如,如果您的整數表示距離,則可以使用-1(不是有效距離)作爲標記值來指示數組的結束。

如果你的整數數組可以合理地包含的任何int值,那麼你可以傳回給你的函數一個額外的參數分配數組的大小。

+0

我喜歡你的想法。我也會使用'#define EON EOF'。 – Jack 2012-04-19 13:02:52

0

您可以使用NULL作爲最終值。您可以使用跟蹤條目數的數組向一個結構添加整數。或者你可以分開跟蹤大小。無論你想要什麼,你都可以做到。

+3

你會如何使用NULL作爲int []的最終值?字節00 00 00 00將被解釋爲(int)0。 – 2012-04-19 00:49:54

+0

準確。如果數組中沒有其他值包含0,則可以使用0作爲終結符。 – 2012-04-19 00:51:53

+2

如果沒有其他值包含42,則可以使用42.答案意味着對我來說,至少「int」是某種可以爲空的類型,當然這不是。 – 2012-04-19 00:53:27

0

C不知道哪裏是你的動態數組的末尾。你應該記住你分配給陣列的大小。

0

當你用malloc分配內存時,分配的字節數存儲在'malloc'內存開始之前。如果你知道大小,你也知道結局! 這在C的聖經中解釋,K & R書。希望我也可以給你頁碼,但是當你看到它時你會知道它的。