如何构建接受多维数组作为参数的函数,接收不兼容的指针类型

How to build function that accepts multidimensional array as parameters, receiving incompatible pointer type

double imprimirValores(char dadosHotelaria[], int n);

int main( void )
{
    char dadosHotelaria2 [1][3][50] = 
    {
        {
            "unidadeid1", "joao fernandes", "quartoExecutivo"
        };           
    };
    imprimirValores(dadosHotelaria2, 1);
  }

double imprimirValores(char dadosHotelaria[][3][50], int n)
{ 
    return 0;
}

warning: passing argument 1 of 'imprimirValores' from incompatible pointer type ((imprimir valores))

人们在评论中暗示了一些建议(还有一个语法错误)。但这有效:

    double imprimirValores(char dadosHotelaria[][3][50], int n)
    { 
       return 0;
    }

    int main( void )
    {
      char dadosHotelaria2 [1][3][50] = 
        {
            {
           "unidadeid1", "joao fernandes", "quartoExecutivo"
            }
        };
        imprimirValores(dadosHotelaria2, 1);
    }

对于初学者来说,数组声明中存在语法错误

char dadosHotelaria2 [1][3][50] = 
{
    {
        "unidadeid1", "joao fernandes", "quartoExecutivo"
    };
    ^^           
};

您不能在 braced-init 列表中放置分号。

您可以像这样放置逗号

char dadosHotelaria2 [1][3][50] = 
{
    {
        "unidadeid1", "joao fernandes", "quartoExecutivo"
    },
    ^^           
};

不过当然像

这样不写逗号会更好
char dadosHotelaria2 [1][3][50] = 
{
    {
        "unidadeid1", "joao fernandes", "quartoExecutivo"
    }
    ^^           
};

当编译器解析这条语句时

imprimirValores(dadosHotelaria2, 1);

它假定函数 return 类型是 int 以与旧版本的 C 兼容,尽管从 C 99 标准开始您不能使用没有初步声明的函数名称。

但实际上该函数具有 return 类型 double。所以编译器报错。

你应该在 main 中使用它的名字之前声明函数,例如

double imprimirValores(char dadosHotelaria[][3][50], int n);

int main( void )
{
    //...

您声明函数以 char [] 作为第一个参数:

double imprimirValores(char dadosHotelaria[], int n);

但是定义它取一个char [][3][50]:

double imprimirValores(char dadosHotelaria[][3][50], int n)
{ 
    return 0;
}

函数的声明必须与其定义相匹配:

double imprimirValores(char dadosHotelaria[][3][50], int n);