接收数组作为指针参数时出现问题



你好,我有一个麻烦,试图管理以下数组。我已经初始化了这个指针int* coordenadasFicha = new int[2];,我想给两个int赋值,向用户请求数字。当我调用pedirCoordenadasFicha(coordenadasFicha);时,问题出现了,Clion建议我将coordenadasFicha转换为int**,但我需要将其用作简单的指针。pedircoordadasficha()基本上是这样做的:

void pedirCoordenadasFicha(int* coordenadasFicha[2]){
std::cin >> *coordenadasFicha[0];
std::cin >> *coordenadasFicha[1];}

欢迎大家的帮助

int*(指向整型的指针)和int*[](指向整型的指针数组)是两种不同的东西。实际上,在函数形参中,int* coordenadasFicha[2]实际上是作为int**(指针指向指针指向整型)传递的,因为数组衰变成指向其第一个元素的指针。

在您的情况下,您正在创建coordenadasFicha作为ints的动态数组,但您的函数期望一个int*指针数组。

所以,要做你正在尝试的事情,你需要这样做:

void pedirCoordenadasFicha(int* coordenadasFicha){
std::cin >> coordenadasFicha[0];
std::cin >> coordenadasFicha[1];
}
int* coordenadasFicha = new int[2];
pedirCoordenadasFicha(coordenadasFicha);
...
delete[] coordenadasFicha;

或:

void pedirCoordenadasFicha(int* coordenadasFicha[2]){
std::cin >> *coordenadasFicha[0];
std::cin >> *coordenadasFicha[1];
}
int** coordenadasFicha = new int*[2];
for(int i = 0; i < 2; ++i) {
coordenadasFicha[i] = new int;
}
pedirCoordenadasFicha(coordenadasFicha);
...
for(int i = 0; i < 2; ++i) {
delete coordenadasFicha;
}
delete[] coordenadasFicha;

或者干脆去掉new,通过引用传递数组:

void pedirCoordenadasFicha(int (&coordenadasFicha)[2]){
std::cin >> coordenadasFicha[0];
std::cin >> coordenadasFicha[1];
}
int coordenadasFicha[2];
pedirCoordenadasFicha(coordenadasFicha);
...

我需要使用它作为一个简单的指针。

int* coordenadasFicha[2]不是一个"简单指针",如果简单指针指的是int*。在任何其他上下文中,coordenadasFicha将是指针数组,但函数参数在c++中不是数组;形参被调整为指向该数组元素的指针。数组的元素是int*,指向int*的指针是int**。因此,coordenadasFicha的类型为int**(调整后)。

如果你想要一个参数的类型为int*,那么你必须声明该参数的类型为int*,而不是其他类型。例子:

void
pedirCoordenadasFicha(int* coordenadasFicha)
{
std::cin >> coordenadasFicha[0];
std::cin >> coordenadasFicha[1];
}

相关内容

  • 没有找到相关文章

最新更新