char(*(* a)())的定义[];

问题描述 投票:0回答:1

我无法理解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)())[];

c arrays pointers function-pointers
1个回答
0
投票

char (*(*a)())[];

是指向函数的指针的声明,该函数返回指向不完整类型char[]的数组的指针。

请注意,在另一个函数中定义函数不是标准的C功能。

这里是至少要编译的演示程序。

#include <stdio.h>

char ( *f() )[]
{
    static char s[][10] =
    {
        "Hello",
        "World"
    };

    return s;
}

int main(void) 
{
    char (*(*a)())[] = f;

    char ( *p )[] = a();

    puts( *p );

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.