我正在使用malloc()创建一个int*数据类型的动态数组。但问题是,如何知道数组的结束?对于int*数据类型,没有与\0等效的数据类型,那么,如何做到这一点呢?是否将大小作为函数的输出参数传递?
malloc()
int*
\0
xeufq47z1#
C不像其他语言那样管理数组长度。你可以考虑这样的结构:
typedef struct t_thing { int* things; size_t count; } t_thing;
在使用中:
t_thing t = { (int*)malloc(sizeof(int) * n), n };
mspsb9vt2#
对于整数,没有与\0等效的“官方”值,但您当然可以使用自己的值。例如,如果整数表示距离,则可以使用-1(不是有效距离)作为标记值来指示数组的结束。如果你的整数数组可以合理地包含 anyint值,那么你可以通过一个附加参数将分配的数组的大小传递回你的函数。
int
7xzttuei3#
您可以使用NULL作为结束值。可以使用跟踪条目数的数组向结构添加整数。或者您可以单独跟踪大小。你想怎么做就怎么做。
NULL
3mpgtkmj4#
C不知道动态数组的结尾在哪里。你应该记住你分配给数组的大小。
pinkon5k5#
当你用malloc分配内存时,分配的字节数就在“malloc”分配的内存开始之前存储。如果你知道大小,你也知道结局!这是在C的圣经中解释的,K&R书。希望我也能给予你页码,但你看到的时候就知道了。
5条答案
按热度按时间xeufq47z1#
C不像其他语言那样管理数组长度。
你可以考虑这样的结构:
在使用中:
mspsb9vt2#
对于整数,没有与
\0
等效的“官方”值,但您当然可以使用自己的值。例如,如果整数表示距离,则可以使用-1(不是有效距离)作为标记值来指示数组的结束。如果你的整数数组可以合理地包含 any
int
值,那么你可以通过一个附加参数将分配的数组的大小传递回你的函数。7xzttuei3#
您可以使用
NULL
作为结束值。可以使用跟踪条目数的数组向结构添加整数。或者您可以单独跟踪大小。你想怎么做就怎么做。3mpgtkmj4#
C不知道动态数组的结尾在哪里。你应该记住你分配给数组的大小。
pinkon5k5#
当你用malloc分配内存时,分配的字节数就在“malloc”分配的内存开始之前存储。如果你知道大小,你也知道结局!这是在C的圣经中解释的,K&R书。希望我也能给予你页码,但你看到的时候就知道了。