c++ - 错误:无法将 'const char**' 转换为 'const char (*)[64]'
问题描述
我尝试实现如下源代码:
bool getParam(char* cmd, char** prm_arr, int num)
{
}
void main()
{
char strC[] = "btOK,btCancel";
char foo[10][10];
bool res = getParam(strC,foo,2);
}
它显示错误:
error: cannot convert ‘char (*)[10]’ to ‘char**’ for argument ‘2’ to ‘bool getParam(char*, char**, int)’
bool res = getParam(strC,foo,2);
我认为 char** 和 char (*)[10] 在这种情况下是相似的,不是吗?
解决方案
数组声明为
char foo[10][10];
转换char( * )[10]
为传递给函数时的类型。并且没有从 typechar ( * )[10]
到 type的隐式转换char *
。
所以函数声明应该是
bool getParam(char* cmd, char ( *prm_arr )[10], int num);
也就是说,在具有罕见异常的表达式中,数组被转换为指向数组元素类型的指针。
例如,如果您有一个 T 类型的数组
T a[N];
当数组转换为类型时T *
。
在数组的声明中foo
,其元素的类型是char[10]
. 所以数组被转换为指向元素类型的指针char ( * )[10]
请注意,函数 main 应声明为
int main()
代替
void main()
推荐阅读
- python - 如何在没有所需用户和安装所有相关依赖项的服务器的情况下在本地部署 Python Dash 应用程序?
- python - 找不到满足 PyQt4 要求的版本(来自版本:)
- database - spring数据分页返回元素的索引
- karate - 如何调用 validate.js 并在功能文件中使用它(验证响应)?
- android - 无论我设置什么出发地和目的地,我总是得到一条路线
- arrays - 将值排序到数组中
- docker - 如何使用 pod-local 环境变量在 pod 上执行 kubectl 命令?
- jquery - 引导模型 ajax 表单在 MVC 发布后再次在模型主体内加载完整的 ActionResult
- c# - HttpClient.PatchAsync 在 Xamarin.iOS 上引发 PlatformNotSupportedException
- database - Conexion Oracle and ODBC