你好,我有一个麻烦,试图管理以下数组。我已经初始化了这个指针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
作为int
s的动态数组,但您的函数期望一个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];
}