Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将新值写入数组_C++_Arrays - Fatal编程技术网

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。是的,在这种情况下,您可以调整课程的内部表示。