2012-04-19 207 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书。希望我也可以给你页码,但是当你看到它时你会知道它的。