dri*_*max 2 c++ arrays arduino arduino-c++
我正在尝试更改数组中对象的参数,但是当我将它传递给函数时,它似乎正在创建一个新参数。
我已经看到了类似的问题和答案,像这一个,但它不为我工作,因为我没有在最后的代码固定的数组的大小。
我创建了一个非常简短的代码版本来显示问题。
#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;
}
Run Code Online (Sandbox Code Playgroud)
我希望输出是:
Initial X: 1
Final X: 39
Run Code Online (Sandbox Code Playgroud)
但实际上是:
Initial X: 1
Final X: 1
Run Code Online (Sandbox Code Playgroud)
此外,目前使用 C++ 向量不是解决方案。我的程序内存使用率很低,并且用于额外代码的空间非常小。
您的问题与您的职能无关。它正在正确更新数组的内容。不需要通过引用传递数组本身。
真正的问题在于数组本身。该声明Vect vectors[2] = {v1, v2};使副本的v1和v2数组中的对象。您的函数正在修改副本,然后您从原件而不是副本输出值。因此,您的输出不会改变,因为该函数不会修改originals。
要完成您正在尝试的操作,请传入一个指针数组,其中指针指向原始对象,而不是它们的副本,例如:
#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;
}
Run Code Online (Sandbox Code Playgroud)
否则,从一个数组开始,例如:
#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;
}
Run Code Online (Sandbox Code Playgroud)