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

Problem receiving an array as pointer parameter

您好,我在尝试管理以下数组时遇到了问题。 我已经初始化了这个指针 int* coordenadasFicha = new int[2]; 并且我想分配两个 int 向用户询问数字。 当我调用 pedirCoordenadasFicha(coordenadasFicha); 时出现问题,Clion 建议我将 coordenadasFicha 转换为 int** 但我需要将其用作简单的指针。 pedirCoordenadasFicha() 基本上是这样做的:

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

欢迎大家的帮助

I need to use it as a simple pointer.

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];
}

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

在您的例子中,您正在创建 coordenadasFicha 作为 int 的动态数组,但您的函数需要一个 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);
...