gpt4 book ai didi

c - 函数返回的动态数组的长度

转载 作者:行者123 更新时间:2023-12-04 10:36:37 25 4
gpt4 key购买 nike

我有一个函数,它接受一些变量并返回一个指向动态分配的整数数组的指针。很快我就发现了问题;在函数之外,我不知道数组中有多少元素(通过检查输入来确定它的成本太高)。

所以,我定义

typedef struct Pair {
int* ptr;
int length;
} Pair;

并修改函数以返回此结构。这按预期工作,但我有顾虑。我从来没有见过这样的事情。这是正确的做法吗?

最佳答案

这是正确的,因为分配函数可以返回分配大小的唯一方法是返回该信息。但是,这不是通常的和习惯的。

通常,调用者知道可能有多少元素,并相应地进行分配。示例包括 scanf(3)、regexec(3) 中的匹配表达式数组和 readv(2) 的缓冲区数组。这些函数传递数组大小,并返回填充的数字。

分配数组的函数比较少见。在标准库中执行的那些操作中,我想不出一个会返回像您这样的结构。通常,指针或计数按值返回,另一个按引用返回。例如,scandir(3) 分配一个字符指针数组。元素的个数就是函数的返回值。数组的位置被写入其地址作为参数传递的指针 (char ***)。

另一种技术是不返回内存,而是提供迭代和自由函数。示例包括 opendir(3) 和 getpwent(3)。

当然,C 标准库是在 C 函数无法返回整个结构的时代开发的。如果不是这样的话,也许他们看起来会不一样。也就是说,caller allocates 的主流习语表明您可能需要仔细考虑您是否真的喜欢设计的函数。

关于c - 函数返回的动态数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61331090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com