接收数组作为指针参数时出现问题
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);
...
您好,我在尝试管理以下数组时遇到了问题。
我已经初始化了这个指针 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);
...