将对象数组的引用传递给函数
Pass reference of array of objects to function
我试图更改数组中对象的参数,但当我将其传递给函数时,它似乎正在创建一个新的参数。
我已经看到了类似的问题和答案,但它对我不起作用,因为我在最终代码中没有固定的数组大小。
我创建了一个非常简短的代码版本来显示这个问题。
#include <iostream>
using namespace std;
class Vect {
public:
Vect(int x, int y)
{
_x = x;
_y = y;
}
int _x;
int _y;
};
void ChangeX(Vect tests[], int size)
{
for (int i = 0; i < size; i++) {
tests[i]._x = 39;
}
}
int main()
{
Vect v1 = Vect(1,2);
Vect v2 = Vect(6,3);
cout << "Initial X: ";
cout << v1._x;
cout << "n";
Vect vectors[2] = { v1, v2 };
cout << "Final X: ";
ChangeX(vectors, 2);
cout << v1._x;
return 0;
}
我预计输出为:
Initial X: 1
Final X: 39
但实际上是:
Initial X: 1
Final X: 1
此外,使用C++向量目前还不是解决方案。我的程序内存使用率很低,而且用于额外代码的空间很小。
您的问题与您的函数无关。它正在正确更新数组的内容。不需要通过引用传递数组本身。
真正的问题是数组本身。语句Vect vectors[2] = {v1, v2};
使复制数组中的v1
和v2
对象。您的功能是修改副本,然后从原件输出值,而不是拷贝。因此,您的输出不会改变,因为函数不会修改原始。
要完成您正在尝试的操作,请传入一个指针数组,其中指针指向原始对象,而不是它们的副本,例如:
#include <iostream>
class Vect {
public:
Vect(int x, int y){
_x = x;
_y = y;
};
int _x;
int _y;
};
void ChangeX(Vect* tests[], int size){
for(int i = 0; i < size; i++){
tests[i]->_x = 39;
}
}
int main()
{
Vect v1(1,2);
Vect v2(6,3);
std::cout << "Initial X:n";
std::cout << v1._x << "n";
std::cout << v2._x << "n";
Vect* vectors[2] = {&v1, &v2};
ChangeX(vectors, 2);
std::cout << "Final X:n";
std::cout << v1._x << "n";
std::cout << v2._x << "n";
return 0;
}
实时演示
否则,从一个数组开始,例如:
#include <iostream>
class Vect {
public:
Vect(int x, int y){
_x = x;
_y = y;
};
int _x;
int _y;
};
void ChangeX(Vect tests[], int size){
for(int i = 0; i < size; i++){
tests[i]._x = 39;
}
}
int main()
{
Vect vectors[2] = {Vect(1,2), Vect(6,3)};
std::cout << "Initial X:n";
std::cout << vectors[0]._x << "n";
std::cout << vectors[1]._x << "n";
ChangeX(vectors, 2);
std::cout << "Final X:n";
std::cout << vectors[0]._x << "n";
std::cout << vectors[1]._x << "n";
return 0;
}
实时演示
相关文章:
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 类 Referention 中C++回调函数引用非静态函数
- 使用函数引用指向节点的指针删除链表中的节点?
- 解释通过从函数引用返回数组的语法
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 使用默认构造函数引用成员变量初始化错误
- 无法调用函数引用 c++
- 使用 decltype(this) 获取函数引用
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 从内联函数引用文件静态变量
- Boost::将sigaction函数引用绑定到实例
- 一种比函数引用更有效的方法
- 奇怪的未定义函数引用,函数调用C++不存在
- 是否可以检测绑定成员函数引用的对象是否被删除或销毁
- 构造函数引用参数导致seg错误
- 是否可以使函数模板从函数引用中获取“decltype”
- 无法让 Lua 函数引用"self"
- 如何解析变量和函数引用(Linker & Compiler)?
- 从不同模块调用函数 - 引用错误
- 如何在主函数中连接到数据库,然后从其他函数引用它