我一直认为,当您想从函数返回数组时,唯一的方法是使用如下指针:
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 的内容。请参阅下面的评论。