gpt4 book ai didi

C 中函数的冲突类型

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

我正在尝试运行下面的代码,但收到下面的错误消息。

程序:

int main()
{
int (*res)[3],i;
res=func();


}

int (*func())[3]
{
static int arr[3][3]={1,2,3,4,5,6,7,8,9};
return arr;
}

错误:

PointerTo1D.c: In function ‘main’:
PointerTo1D.c:6:5: warning: assignment makes pointer from integer without a cast [enabled by default]
res=func();
^
PointerTo1D.c: At top level:
PointerTo1D.c:11:7: error: conflicting types for ‘func’
int (*func())[3]
^
PointerTo1D.c:6:6: note: previous implicit declaration of ‘func’ was here
res=func();

有人可以帮我吗???

最佳答案

res 是一个指针,指向一个包含 3 个 int 元素的数组

int (*func())[3]: func 是一个函数,它返回一个指向包含 3 个 int 元素的数组的指针

因为函数 func() 没有原型(prototype),你得到:

warning: implicit declaration of function 'func'
res=func();

这意味着编译器使用默认原型(prototype)int func()

有下一个警告:

warning: assignment makes pointer from integer without a cast [enabled by default]
res=func();

因为使用了默认原型(prototype),编译器假定函数 func() 返回 int ,然后将其分配为指向 res 的指针指针

当到达函数 func() 的代码时,您会得到错误:

error: conflicting types for 'func'
int (*func())[3]

解决方案是在 main 之前提供适当的原型(prototype)。

int (*func())[3];

int main()
{
...
}

更新:还有警告:

warning: missing braces around initializer [-Wmissing-braces]
static int arr[3][3]={1,2,3,4,5,6,7,8,9};

最好使用:

static int arr[3][3]={{1,2,3}, {4,5,6}, {7,8,9}};

关于C 中函数的冲突类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29297318/

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