gcc C17 return 来自不兼容的指针类型

gcc C17 return from incompatible pointer type

char *funArr(char *s[]){
    return s;
}


int main(void){ 
    char *s[] = {"a","b"};
    char *r = funArr(s);
    printf("%s",r[0]);
}

我无法从函数中正确获取数组。我知道问题是什么,但我不知道如何解决。我刚刚开始使用 C,有人可以帮助我吗?

具有数组类型的函数参数被编译器调整为指向数组元素类型的指针。

所以这个函数声明

char *funArr(char *s[]){

被编译器调整为

char *funArr(char **s){

如您所见,参数 s 的类型为 char **。如果你想 return 这个指针那么函数 return 类型应该是 char **.

char ** funArr(char *s[]){

所以在main中你需要写

char **r = funArr(s);
printf("%s",r[0]);

这是您更新后的程序。

#include <stdio.h>

char ** funArr( char *s[] )
{
    return s;
}


int main(void)
{ 
    char * s[] = { "a", "b" };
    
    char **r = funArr( s );
    
    puts( r[0] );
}

程序输出为

a