如何构建接受多维数组作为参数的函数,接收不兼容的指针类型
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);
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);