将数组设置为不同大小的不同数组

时间:2014-08-03 02:02:54

标签: c++ arrays arduino arduino-ide arduino-uno

所以我一直在为我的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类似,我对此非常了解。

我觉得我喂养的鲨鱼没有足够的保护,而我的代码中的这一点让我烦恼。

我的问题是如何初始化数组,但稍后会更改?

2 个答案:

答案 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;
}
相关问题