C++函数接收数组指针参数时类型不匹配报错如何解决?
问题根因
C/C++中,函数参数里声明的数组类型会自动退化为指针,你写的void pedirCoordenadasFicha(int* coordenadasFicha[2])实际等价于void pedirCoordenadasFicha(int** coordenadasFicha),要求传入指向int指针的指针类型;但你定义的coordenadasFicha是int*类型(指向长度为2的int数组首元素的指针),二者类型不匹配,所以编译器会提示你强制转换为int**。
同时你现有函数实现里用*coordenadasFicha[0]的写法,是把参数当成「存储了两个int指针的数组」来操作,和你实际需要的「存储两个int值的数组」的需求完全不符,就算强转成功也会触发非法内存访问错误。
推荐解决方案(修改函数定义,符合使用需求)
你只需要把函数参数改成接收int*类型,对应调整内部赋值逻辑即可:
// 修改后的函数声明/定义 void pedirCoordenadasFicha(int* coordenadasFicha){ // 直接通过下标访问数组元素赋值,不需要额外解引用 std::cin >> coordenadasFicha[0]; std::cin >> coordenadasFicha[1]; }
改完之后你原来的调用代码pedirCoordenadasFicha(coordenadasFicha);可以直接正常运行,不需要做任何调整,coordenadasFicha也能保持普通int指针的用法。
可选方案(仅当必须保留现有函数参数定义时使用)
如果因为业务要求不能修改函数参数的声明,你需要调整调用逻辑,传入指针本身的地址:
// 调用时传入指针本身的地址 pedirCoordenadasFicha(&coordenadasFicha);
注意:这种写法本质是把第一个数组元素的地址和coordenadasFicha指针本身的地址绑定,逻辑极易混淆,非常不推荐使用。
内容的提问来源于stack exchange,提问作者Tomás Iglesias
相关产品推荐
相关产品推荐

