【发布时间】:2020-08-08 21:43:18
【问题描述】:
我无法理解
char (*(*a)())[]
int main()
{
char (*(*a)())[]; // do not change this
char *x="My endless\n";
char * func (){
return(x);
}
a=func;
return 0;
}
当我编译时,我收到如下警告:
main.c:13:6:警告:来自不兼容指针类型的赋值 [-Wincompatible-pointer-types]
指的是a=func
我知道char (*(*a)()) 表示指向返回char 指针的函数的指针,但我不知道添加[] 对它有什么作用,即char (*(*a)())[];
【问题讨论】:
-
首先你不能在另一个函数中定义一个函数,将 func 定义移出 main 并调整它的定义
-
@bruno:C 标准允许在函数内部定义函数等扩展,GCC 支持这一点。
-
@EricPostpischil 创建一个闭包?哇
-
@bruno:它不是一个功能齐全的闭包,因为它不包含绑定变量;它们仅在其正常生命周期内有效。见gcc manual:“如果你试图在包含函数退出后通过它的地址调用嵌套函数,一切都会崩溃。”
标签: c arrays pointers function-pointers