9

我正在使用int*数据类型制作一个动态数组malloc()。但问题是,如何知道数组的结尾?

没有对应\0int*数据类型,那么,如何做到这一点?将大小作为函数的输出参数传递?

4

5 回答 5

15

C 不像其他一些语言那样管理数组长度。

您可能会为此考虑一个结构:

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

正在使用:

t_thing t = { (int*)malloc(sizeof(int) * n), n };
于 2012-04-19T00:47:14.147 回答
10

没有“官方”等效\0于整数,但您当然可以使用自己的值。例如,如果您的整数表示距离,那么您可以使用 -1(不是有效距离)作为标记值来指示数组的结尾。

如果您的整数数组可以合理地包含任何 int值,那么您可以将已分配数组的大小与附加参数传回您的函数。

于 2012-04-19T00:45:29.627 回答
1

您可以NULL用作最终值。您可以使用跟踪条目数的数组将整数添加到结构中。或者您可以单独跟踪尺寸。你可以随心所欲地做。

于 2012-04-19T00:47:05.433 回答
1

C 不知道动态数组的末尾在哪里。您应该记住为数组分配的大小。

于 2012-04-19T02:35:00.577 回答
1

当您使用 malloc 分配内存时,分配的字节数存储在“malloc”内存开始之前。如果你知道大小,你也知道结束!这在 K&R 书籍 C 的圣经中有解释。希望我也能给你页码,但是当你看到它时你就会知道。

于 2012-04-19T05:41:52.820 回答