【问题标题】:Problem receiving an array as pointer parameter接收数组作为指针参数的问题
【发布时间】:2021-11-26 04:07:42
【问题描述】:

您好,我在尝试管理以下数组时遇到了麻烦。 我已经初始化了这个指针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];}

欢迎大家帮忙

【问题讨论】:

  • 请附上minimal reproducible example 以及您遇到的确切问题(不要只称其为“麻烦”)。此问题中缺少相关代码,但您似乎混淆了int*int[2]int*[2]
  • Clion recomends me cast coordenadasFicha to int** 这似乎是一个糟糕的建议。你确定它推荐吗?

标签: c++ pointers c++98


【解决方案1】:

int*(指向 int 的指针)和 int*[](指向 int 的数组)是两个不同的东西。实际上,在函数参数中,int* coordenadasFicha[2] 实际上是作为 int**(指向 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 的数组,而不是指向 int 的指针
【解决方案2】:

我需要将它用作简单的指针。

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

【讨论】:

  • 感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2019-05-22
  • 2011-02-05
  • 1970-01-01
  • 2010-12-15
  • 2019-05-11
  • 2012-01-24
相关资源
最近更新 更多