将新值写入数组

时间:2015-10-17 13:05:37

标签: 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();

这很顺利。但后来当我尝试将新值写入这些数组时,例如:

a = {-66, -66};
b = {-66, 66};

我在这里得到一个错误:

error: assigning to an array from an initializer list

我理解,在声明后我无法直接将值赋给数组。但这应该是怎样的呢?

6 个答案:

答案 0 :(得分:3)

您无法使用初始化列表分配给数组。但是如果你使用std::array而不是C数组,那么这是可能的:

#include <array>
typedef std::array<float, 2> point2;

point2 a = {-90.0, -90.0};
a = {-66, -66};

你仍然可以将它传递给像glVertex2fv这样的函数,它使用std::array::data获取指向数组的指针:

glVertex2fv(a.data());

Live demo.

答案 1 :(得分:2)

在这些语句中,您没有为数组赋值,而是在初始化该数组。更改数组中的值可以这样做:

a[0] = -66;
a[1] = -66;

答案 2 :(得分:2)

初始化数组后,您无法使用初始化列表,只需执行:

a[0] = -66;
a[1] = -66;

答案 3 :(得分:2)

当你的案例真正涉及平原中的点时,你应该更喜欢使用类而不是数组。

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.

如您所见,这将为您提供更自然,更富有表现力的界面。这样的接口总是提高可读性和可维护性。

答案 4 :(得分:1)

仅在初始化期间可以这样做。 使用:

a[0]= - 66;
a[1] = -66;

但是,您可以创建临时数组,然后将其复制。

point2 tmp = {-66, -66 }
System.arraycopy( tmp, 0, a, 0, src.length );

但对于这样的任务来说,这看起来有点过分了。

答案 5 :(得分:1)

你应该做点什么:

a[0] =-66;
a[1]=-66;