1

所以我一直在为我的 arduino 编程,它是 c++ 的一些变体。我一直在编写一个程序来勾选一个 4 位七段显示器的每个数字。我一直无法将我的 pin[] 设置为不同长度的不同数组。

例如,显示 1 表示将打开 2 个引脚,这在数组中表示,int one[] = {1,2};显示 4 则需要 4 个引脚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,我对此了解很多。

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

我的问题是你如何初始化一个数组,然后再改变它?

4

2 回答 2

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;
}
于 2014-08-03T02:10:48.013 回答
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;
}
于 2014-08-03T07:53:09.063 回答