C - 如何将静态数组放入数组中
C++ - How do I put a static array inside my array?
我为总的菜单问题表示歉意,但我只是找不到答案。我在这里搜索,在这里搜索,搜索了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 : '{'
如何将静态数组放入阵列中?我意识到我可以单独设置每个项目,但是必须有更好的方法。
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}
这是一个完整的样本。诀窍是在新构造的数组上使用初始化列表,然后将其与您的初始列表交换。我相信下一个C 更新也将消除对双括号的需求,这使其与熟悉的语法更加紧密。
初始化列表可用于初始化:)
就像您声明变量时:
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))
)
如果您不想手动分配每个元素,则可以执行此操作:
short pixelarray2[3][3] = {{1,0,-1},{1,0,-1},{1,0,-1}};
memcpy(pixelarray, pixelarray2, sizeof(pixelarray));
@nick指出:初始化器列表不用于分配。
阵列不可分配,因此简短的答案是您无法完全做您的要求。对于大多数目的而言,做足够类似的事情的最直接方法可能是一个2D阵列类,在我在上一个答案中发布的一个顺序,该类是std::vector
周围的包装器。
如果您坚持使用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;
}
从直接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;
一旦您声明了您的数组,就无法使用分配操作员重新分配数组的整个内容。
因此,在此之后更改内容或数组:
short pixelarray[3][3] = {{1,1,1},{0,0,0},{-1,-1,-1}};
您需要循环遍历数组并手动更改每个值,或者像std :: memcpy之类的东西以复制新值。
但是,您真的不应该首先使用数组,而是使用一些从std Collections库中使用的阵列,例如std ::数组或std :: vector。仅在您有真正的好理由时使用数组,为什么无法使用集合。
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++函数中声明静态 2D 数组?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 基于字节数组生成静态范围整数值
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- C++访问静态 constexpr 数组
- 初始化类中的静态 const 数组 - C++
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 动态分配的数组和静态数组之间的区别
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 如何在静态函数中使用成员函数数组
- 具有大的2d数组:静态int与int