我为整个noob问题道歉,但我找不到答案。我用Google搜索,在这里搜索,搜索C ++数组文档,以及一些C ++数组教程 问题很简单。为什么
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
short pixelarray[3][3] = {{1,1,1},{0,0,0},{-1,-1,-1}};
... //do stuff. Imagine a loop here, and BIG array - I'm just simplifying it for StackOverflow
pixelarray = {{1,0,-1},{1,0,-1},{1,0,-1}};
return 0;
}
导致错误?
1>arraytest.cpp(11): error C2059: syntax error : '{'
如何在阵列中放置静态数组?我意识到我可以单独设置每个项目,但必须有更好的方法。
答案 0 :(得分:6)
C ++中的内置数组存在问题,而且不可分配确实使它们变得不灵活。我坚持使用std::array
,这是一个C ++ 11容器,它可以模拟更好的数组样式,它允许使用与您正在寻找的语法类似的语法:
std::array<int, 3> arr{{1, 2, 3}};
std::array<int, 3>{{4, 5, 6}}.swap(arr);
//now arr is {4, 5, 6}
这是一个full sample。诀窍是在新构造的数组上使用初始化列表,然后将其与您的交换。我相信下一个C ++更新也将消除对双括号的需求,这使得它与熟悉的语法更加匹配。
答案 1 :(得分:3)
初始化列表只能用于初始化:)
就像声明你的变量一样:
short pixelarray[3][3] = {{1,1,1},{0,0,0},{-1,-1,-1}}; // this is ok
你必须删除它:
pixelarray = {{1,0,-1},{1,0,-1},{1,0,-1}};
手动分配新值(即pixelarray[x][y] =
或memcpy(pixelarray, <some other array>, sizeof(pixelarray))
)
答案 2 :(得分:2)
如果您不想手动分配每个元素,可以执行以下操作:
short pixelarray2[3][3] = {{1,0,-1},{1,0,-1},{1,0,-1}};
memcpy(pixelarray, pixelarray2, sizeof(pixelarray));
正如@Nick所指出的那样:初始化列表不适用于分配。
答案 3 :(得分:2)
阵列不可分配,所以简短的回答是你不能完全按照你的要求去做。为大多数目的做类似事情的最直接方法可能是一个2D数组类,它作为std::vector
的包装器,按照我在previous answer中发布的那个顺序。
如果你坚持使用C风格的数组,一种可能就是使用指针:
int main() {
typedef short array[3];
array pixelarray0[3] = {{1,1,1},{0,0,0},{-1,-1,-1}};
array pixelarray1[3] = {{1,0,-1},{1,0,-1},{1,0,-1}};
array *pixelarray = pixelarray0;
// when needed:
pixelarray = pixelarray1;
}
答案 4 :(得分:2)
从直接C语境中提取此问题,您可以使用不同的常量数组,只需使用memcpy
复制它们:
typedef short TArray[3][3];
const TArray a1 = {{1,1,1},{0,0,0},{-1,-1,-1}};
const TArray a2 = {{1,0,-1},{1,0,-1},{1,0,-1}};
// ...
TArray a;
memcpy( a, a2, sizeof(TArray));
或者你可以利用C99结构复制,但我认为这是一个危险的黑客,因为结构可能被填充为大于数组,或具有不同的对齐。
typedef struct {
TArray arr;
} TDummyArray;
// ...
TArray a;
*(TDummyArray*)a = *(TDummyArray*)a2;
答案 5 :(得分:0)
一旦声明了数组,就无法使用赋值运算符重新分配数组的整个内容。
所以在此之后更改内容或数组:
short pixelarray[3][3] = {{1,1,1},{0,0,0},{-1,-1,-1}};
您需要循环遍历数组并手动更改每个值,或者您需要使用std :: memcpy来复制新值。
但是你应该首先使用数组,使用std集合库中的一些代替std :: array或std :: vector。如果你有一个非常好的理由不能使用集合,那么只使用数组。