所以我一直在为我的arduino编程,这是c ++的一些变体。我一直在编写一个程序来勾选每个4位七段显示器的数字。我一直无法将引脚[]设置为不同长度的不同阵列。
例如,显示一个表示2个引脚将打开,它们在数组int one[] = {1,2};
中表示,并显示四个引脚int four[] = {1,2,3,4};
。
我一直在尝试的是:
int pins[] = null;
int one[] = {1,2};
int four[] = {1,2,3,4};
switch(num) {
case 1: pins = one; break;
case 4: pins = four; break;
}
然而,这已经造成了问题,并且不允许我上传它,因为事情只会在任何地方破坏。
我对c ++知之甚少,只是它与Java类似,我对此非常了解。
我觉得我喂养的鲨鱼没有足够的保护,而我的代码中的这一点让我烦恼。
我的问题是如何初始化数组,但稍后会更改?
答案 0 :(得分:5)
如上所述,这将无法编译,因为pins
没有定义的大小,并且不允许将数组分配给另一个不同大小的数组。但是,您可以使用指向数组的指针来实现您的尝试:
int one[] = {1,2};
int four[] = {1,2,3,4};
int* pins = nullptr; // use NULL if your compiler doesn't support C++11.
size_t pinslen = 0;
switch (num) {
case 1:
pins = one;
pinslen = sizeof one;
break;
case 4:
pins = four;
pinslen = sizeof four;
break;
}
答案 1 :(得分:1)
int one[] = {1,2};
,int four[] = {1,2,3,4};
的类型不同,我们有int one[2]
和int four[4]
。它们都可以衰减到int*
,但是你会丢失尺寸信息,并且应该保持自己的尺寸。
可能是使用std::vector
如下:
std::vector<int> one = {1, 2};
std::vector<int> four = {1, 2, 3, 4};
std::vector<int>* pins = nullptr;
switch (num) {
case 1: pins = &one; break;
case 4: pins = &four; break;
}
对于C ++ 03:
const int c_one[] = {1, 2};
const int c_four[] = {1, 2, 3, 4};
std::vector<int> one(c_one, c_one + 2);
std::vector<int> four(c_four, c_four + 4);
std::vector<int>* pins = 0;// or NULL
switch (num) {
case 1: pins = &one; break;
case 4: pins = &four; break;
}
或者,您可能希望复制引脚而不使用指针,例如:
const int one[] = {1, 2};
const int four[] = {1, 2, 3, 4};
std::vector<int> pins;
switch (num) {
case 1: pins.assign(one, one + 2); break;
case 4: pins.assign(four, four + 4); break;
}