Установить массив в другой массив неизвестного размера

Так что я программировал для своего 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, о котором я знаю немного.

Я чувствую, что кормлю акул недостаточной защитой, и этот бит в моем коде вызывает у меня проблемы.

Мой вопрос: как вы инициализируете массив, но потом меняете его?

1

Решение

Как написано, это не скомпилируется, потому что 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;
}
5

Другие решения

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;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector