Так что я программировал для своего Arduino, который является некоторым вариантом C ++. Я пишу программу для отметки каждого номера четырехзначного семисегментного дисплея. У меня были проблемы с установкой моих выводов [] на разные массивы разной длины.
Например, отображение одного означает, что будут включены 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;
}
Однако это вызывает проблемы и не позволяет мне загружать его, потому что вещи просто ломаются везде.
Я немного знаю с ++, но он похож на Java, о котором я знаю немного.
Я чувствую, что кормлю акул недостаточной защитой, и этот бит в моем коде вызывает у меня проблемы.
Мой вопрос: как вы инициализируете массив, но потом меняете его?
Как написано, это не скомпилируется, потому что 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;
}
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;
}