gpt4 book ai didi

c - C 有没有办法从函数返回整个数组?

转载 作者:行者123 更新时间:2023-11-30 18:41:34 25 4
gpt4 key购买 nike

如果不是,通过指针执行此操作的正确方法是什么?例如,我给函数一个二维数组,然后以线性方式融合它们。

最佳答案

在 C 语言中,数组不能是函数参数或函数返回类型。

当您需要数组参数时,通常会传递一个指向某个数组元素的指针以及有关该点可用元素数量的附加信息(或者,很少情况下,传递一个指向数组本身的指针);因此该函数可以访问原始数组元素。 (C 中的声明语法为此提供了视觉指南;当您将函数参数声明为具有类型 T[] 时,这意味着它具有类型 T *。)

返回更困难,因为您需要决定是创建新数组还是就地修改现有数组。由于创建新数组会产生非本地所有权责任,因此函数最好不创建此责任,而是要求调用者通过可变指针提供输出数组。 p>

这是一个例子;添加两个数组的函数:

int * add(int const * a, int const * b, size_t len, int * out)
{
for (size_t i = 0; i != len; ++i)
out[i] = a[i] + b[i];

return out; // returning the destination is traditional more than useful
}

最后,如果将数组包装在结构中,则可以按值传递数组:

struct Foo { int data[10]; }

struct Foo add(struct Foo a, struct Foo b)
{
struct Foo result;
for (size_t i = 0; i != 10; ++i)
result.data[i] = a.data[i] + b.data[i];
return result;
}
<小时/>

以下是来自流行平台和标准库的一些有关如何处理数组的示例:

  • strcpymemcpy:将一个数组复制到另一个数组中;调用者提供目的地

  • strdup:复制数组,分配新数组,调用者继承责任。

  • strtok:返回给定数组的子数组;就地修改给定的数组。

  • scanf 采用 %m 格式:生成(已解析输入数据的)新数组,调用者继承责任。

关于c - C 有没有办法从函数返回整个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903486/

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