C++ 将新值写入数组
这是我的代码片段:C++ 将新值写入数组,c++,arrays,C++,Arrays,这是我的代码片段: typedef float point2[2]; point2 a = {-90, -90}; point2 b = {-90, 90}; point2 c = {90, 90}; point2 d = {90, -90}; glBegin(GL_POLYGON); glVertex2fv(a); glVertex2fv(b); glVertex2fv(c); glVertex2fv(d); glEnd(); 这真的很顺利。但后来我尝试将
typedef float point2[2];
point2 a = {-90, -90};
point2 b = {-90, 90};
point2 c = {90, 90};
point2 d = {90, -90};
glBegin(GL_POLYGON);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
glVertex2fv(d);
glEnd();
这真的很顺利。但后来我尝试将新值写入这些数组时,如:
a = {-66, -66};
b = {-66, 66};
这里我得到一个错误:error: assigning to an array from an initializer list
我明白,我不能在数组声明之后直接给数组赋值。但这应该是什么样子?这仅在初始化期间才可能。 使用: 但是,您可以创建临时数组,然后复制它
point2 tmp = {-66, -66 }
System.arraycopy( tmp, 0, a, 0, src.length );
但对于这样的任务来说,这似乎是一种过度的杀伤力。这仅在初始化期间才可能实现。 使用: 但是,您可以创建临时数组,然后复制它
point2 tmp = {-66, -66 }
System.arraycopy( tmp, 0, a, 0, src.length );
但对于这样的任务来说,这似乎是一种过度的操作。在这些语句中,您不是在给数组赋值,而是在初始化该数组。更改数组中的值可以这样做:
a[0] = -66;
a[1] = -66;
在这些语句中,您不是为数组赋值,而是初始化该数组。更改数组中的值可以这样做:
a[0] = -66;
a[1] = -66;
你应该这样做:
a[0] =-66;
a[1]=-66;
你应该这样做:
a[0] =-66;
a[1]=-66;
数组初始化后不能使用初始值设定项列表,只需执行以下操作:
a[0] = -66;
a[1] = -66;
数组初始化后不能使用初始值设定项列表,只需执行以下操作:
a[0] = -66;
a[1] = -66;
不能使用初始值设定项列表为数组赋值。但是,如果使用C数组而不是C数组,则这是可能的:
#include <array>
typedef std::array<float, 2> point2;
point2 a = {-90.0, -90.0};
a = {-66, -66};
不能使用初始值设定项列表分配给数组。但是,如果使用C数组而不是C数组,则这是可能的:
#include <array>
typedef std::array<float, 2> point2;
point2 a = {-90.0, -90.0};
a = {-66, -66};
当您的案例实际上是关于平面中的点时,您应该更喜欢使用类而不是数组
class point2 {
private:
float x_;
float y_;
public:
point2(const float x, const float y):
x_{x}, y_{y} {};
point2(const point2& o):
x_{o.x_}, y_{o.y_} {};
operator = (const point2& o) {
x_ = o.x_;
y_ = o.y_;
}
// ...
};
point2 a = {90.0, 90.0}; // initialize a
a = {45.0, 45.0}; // untested, should work
a = point2{45.0, 45.0} // will work.
如您所见,这将为您提供一个更自然、更富有表现力的界面。这样的接口总是可以提高可读性和可维护性。当您的案例实际上是关于平面中的点时,您应该更喜欢使用类而不是数组
class point2 {
private:
float x_;
float y_;
public:
point2(const float x, const float y):
x_{x}, y_{y} {};
point2(const point2& o):
x_{o.x_}, y_{o.y_} {};
operator = (const point2& o) {
x_ = o.x_;
y_ = o.y_;
}
// ...
};
point2 a = {90.0, 90.0}; // initialize a
a = {45.0, 45.0}; // untested, should work
a = point2{45.0, 45.0} // will work.
如您所见,这将为您提供一个更自然、更富有表现力的界面。这样的界面总是可以提高可读性和可维护性。初始化列表仅在初始化过程中可用。我投票关闭这个问题,因为它非常糟糕,你可以在任何教科书中轻松找到@是的,我知道。但正如我所说的,我想知道是否有比[0]=。。。a[1]=…好的,那么@DzikiChrzan,我将检索我的否决票,抱歉,我将向上投票给你一个我喜欢的答案。初始化列表仅在初始化过程中可用。我将投票结束这个问题,因为它非常糟糕,你可以在任何教科书中轻松找到@是的,我知道。但正如我所说的,我想知道是否有比[0]=。。。a[1]=…好的,那么@DzikiChrzan,我将收回我的否决票,作为一种抱歉,我将向上投票一个我喜欢的答案。嗯,好的。我知道我可以用你的方式做这件事,但我希望也许有更方便的方式嗯,好的。我知道我可以用你的方式做这件事,但我希望也许有更方便的方式第一个解决方案应该可行,但它没有必要cost@HumamHelfawi是的,我刚才提到过,因为我假设OP已经知道如何访问数组元素,但是正在寻找更密集的符号。C++中的数组不是对象。他们没有构造函数。您的第一个建议不起作用,因为您不能修改本地定义的数组变量所指向的指针。@AlgirdasPreidžius hm?本地定义的数组变量未指向pointer@AlgirdasPreidžius但你是对的,它不起作用,因为没有可调用的构造函数。我的错误,我将编辑第一个解决方案应该工作,但它有不必要的cost@HumamHelfawi是的,我刚才提到过,因为我假设OP已经知道如何访问数组元素,但是正在寻找更密集的符号。C++中的数组不是对象。他们没有构造函数。您的第一个建议不起作用,因为您不能修改本地定义的数组变量所指向的指针。@AlgirdasPreidžius hm?本地定义的数组变量未指向pointer@AlgirdasPreidžius但你是对的,它不起作用,因为没有可调用的构造函数。我的错误,我会的是的,所以有一种方法可以做得不同!谢谢,这是我一直在寻找的答案是的,所以有一种不同的方法!谢谢,这是我一直在寻找的答案一般来说,这是一个好主意,但如果您主要希望将该点传递给需要指向数组的指针的第三方库,则可能不太方便。这里就是这样。您可以有一个
point2
类,该类包含一个数组或std::array
,并为x和y提供方便的getter/setter。是的,当然,在这种情况下,您可以调整内部表示。这通常是一个好主意,但如果您主要希望将点传递给第三方库,而该库需要指向数组的指针,则可能不太方便。这里就是这样。您可以有一个point2
类,它包含一个数组或std::array
,并为x和y提供方便的getter/setter。是的,在这种情况下,您可以调整课程的内部表示。