You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:57:02