gpt4 book ai didi

c - 返回类型为二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:40 24 4
gpt4 key购买 nike

以下代码在编译时给出了函数 fun2() 类型冲突的错误。

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

char *** fun(){
char *** b;
calloc(10,sizeof(char **));
b[0]=fun2();
return b;
}

char ** fun2(){
char **a;
a=calloc(10,sizeof(char*));
a[0]=calloc(10,sizeof(char));
return a;
}
main(){
char **c;
c=fun();
}

然而,这段代码并没有——

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

char *** fun(){
char *** b;
calloc(10,sizeof(char **));
b=fun2();
char **a;
a=calloc(10,sizeof(char*));
a[0]=calloc(10,sizeof(char));
return a;
}

main(){
char **c;
c=fun();
}

但是,两个程序都在执行相同的任务。编译错误背后的原因是什么?

最佳答案

第一个代码片段的问题在于 fun2() 在首次使用之前尚未定义或声明。编译器生成返回 int 的隐式函数声明,但 fun2() 的实际定义返回 char**,这就是原因冲突类型的编译器错误。要更正冲突类型错误,您可以放置​​ fun2() 的定义或放置 fun2() 的声明到 fun()< 的定义之前.

请注意,某些 calloc() 调用的返回值被分配给任何变量。

只需提及 calloc() 将所有位设置为零,根据 C99 标准:

Note that this need not be the same as the representation of floating-point zero or a null pointer constant.

所以使用 calloc()NULL 指针数组可能是不正确的(实际上我不知道这是不是曾经如此)。另一种方法是将 NULL 显式分配给指针数组中的每个元素。

关于c - 返回类型为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247988/

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