gpt4 book ai didi

返回数组的 C 函数

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

我一直认为,当你想从函数返回数组时,唯一的方法就是使用指针,如下所示:char * func();

但是昨天,当我查看 K & R 时,我 注意到 错误地假设 char x()[] 也是一个有效的构造。所以我继续测试并编写了以下代码:

#include <stdio.h>
#include <stdlib.h>

char string1[10] = "123456789";


char x(void)[10];

int main(void) {
printf("string returned by x() is %s",x());
return EXIT_SUCCESS;
}

char x(void)[10] {
return x;
}

在 Windows 上使用 GCC 进行编译,会引发以下错误:

..\src\07arrreturn.c:7:6: error: 'x' declared as function returning an array
..\src\07arrreturn.c: In function 'main':
..\src\07arrreturn.c:10:2: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]
..\src\07arrreturn.c: At top level:
..\src\07arrreturn.c:14:6: error: 'x' declared as function returning an array
..\src\07arrreturn.c: In function 'x':
..\src\07arrreturn.c:15:2: warning: return makes integer from pointer without a cast [enabled by default]

发生了什么事?我是否误解了书上的内容?如何从函数返回多个值(或地址)?难道这不是因为只有一个有限大小的 CPU 寄存器可以保存返回值吗?如果你要返回一大块数据,你只能通过返回它的地址来完成,对吗?

char x()[] 是怎么回事?这种东西还用得着吗?

编辑:事实上我确实误读了 K&R 的内容。请参阅下面的评论。

最佳答案

char x()[] is also a valid construct

不按原样,也不完全在这种情况下。

您可以使用类似的语法:

  • 声明一个指向数组的指针:char (*arrPtr)[20];

  • 声明函数指针数组:void (*foo[20])(void);

  • 取消引用函数调用的返回值(指针):char *foo(); char c = foo()[0];

  • 声明一个返回数组指针的函数:char (*foo())[20]

  • 或者与函数指针相同:char (*(*foo)())[20]

您要寻找其中哪一个?

关于返回数组的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728602/

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