如何知道int *数组的结尾?
我正在使用malloc()
制作一个带有int*
数据类型的动态数组。但问题是:如何知道数组的末尾?没有一个相当于\0
的数据类型为int*
,那么,该怎么做?传递大小作为函数的参数?我希望你明白这一点。任何帮助非常感谢。如何知道int *数组的结尾?
C不像其他语言那样管理数组长度。
你可能会考虑这个结构:
typedef struct t_thing {
int* things;
size_t count;
} t_thing;
使用:
t_thing t = { (int*)malloc(sizeof(int) * n), n };
对于整数,没有与“\0
”等价的“官方”,但您当然可以使用自己的价值。例如,如果您的整数表示距离,则可以使用-1(不是有效距离)作为标记值来指示数组的结束。
如果你的整数数组可以合理地包含的任何int
值,那么你可以传回给你的函数一个额外的参数分配数组的大小。
我喜欢你的想法。我也会使用'#define EON EOF'。 – Jack 2012-04-19 13:02:52
您可以使用NULL
作为最终值。您可以使用跟踪条目数的数组向一个结构添加整数。或者你可以分开跟踪大小。无论你想要什么,你都可以做到。
你会如何使用NULL作为int []的最终值?字节00 00 00 00将被解释为(int)0。 – 2012-04-19 00:49:54
准确。如果数组中没有其他值包含0,则可以使用0作为终结符。 – 2012-04-19 00:51:53
如果没有其他值包含42,则可以使用42.答案意味着对我来说,至少“int”是某种可以为空的类型,当然这不是。 – 2012-04-19 00:53:27
C不知道哪里是你的动态数组的末尾。你应该记住你分配给阵列的大小。
当你用malloc分配内存时,分配的字节数存储在'malloc'内存开始之前。如果你知道大小,你也知道结局! 这在C的圣经中解释,K & R书。希望我也可以给你页码,但是当你看到它时你会知道它的。
你正在使用malloc()glob像malloc(sizeof(int)* ELEMENTS)的一些内存我想。然后,您确实知道ELEMENTS的大小,您可以保存该变量并将其传递给您的函数。 – 2014-03-28 15:29:52