2016-01-23 2 views
0

Я пытаюсь создать программу, которая будет считывать некоторые данные в 2-мерный массив. Чтобы проверить функциональность, я сделал эту небольшую примерную программу. В настоящее время переменная объявлена ​​как фиксированный 2-мерный массив и содержит некоторые логические данные.Извлечение одномерного массива из 2-мерного массива

boolean runData[4][20] = { 
     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 
     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 
     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} 
}; 

Теперь у меня есть функция, к которой я должен передать эти данные, функция принимает 1 мерную булеву массив в качестве аргумента:

void fireLEDs(boolean states[20]){ 
    ... 
} 

Таким образом, это означает, что я должен сегментировать эти данные в 4 одномерных массива и передать каждый из них функции fireLEDs.

код Я пытаюсь прямо сейчас, чтобы сделать это:

for(int b=0;b<4;b++){ 
    fireLEDs(runData[b][]); 
    delayMicroseconds(divDelay); 
} 

Однако, это не работает.

Я не очень хорошо знаком с C, поэтому такая функция может вообще не существовать, но некоторые google-fu говорят, что это должно работать.

В качестве примечания: Я использую компилятор arduino, но этот вопрос имеет мало общего с тем, что я думаю.

+1

'Однако это не сработает.' Не очень хорошая постановка задачи. –

+1

Добро пожаловать в переполнение стека! Сначала прочитайте страницу [Ask]. –

+0

«не работает» означает ошибку компилятора или неправильный вывод? 'runData [b]' будет работать до тех пор, пока функция 'void fireLEDs (булевых состояний [20])' будет читать только 20 элементов. Поскольку создание 2D-массива хранит все в памяти в пространстве, то есть, если функция, читающая более 20, читать элементы в следующем массиве в 2D-массиве – Charana

ответ

0

Как я могу видеть, вы должны изменить

fireLEDs(runData[b][]); 

в

fireLEDs(runData[b]); 
+0

Эй, это компиляция, однако это связано с другим вопросом. Если бы я хотел извлечь «столбец», так сказать, из данных, что бы я тогда сделал? – Khurram

+0

@Хуррам Что значит «извлечь»? Есть много способов. Просто использование 'runData [b]' также выполнит эту работу. –

+0

Может быть, я немного смущен. В любом случае изменение, которое вы предложили, скомпилируется, но я сделаю некоторое тестирование и сделаю так, чтобы он вел себя так, как я этого хочу. Спасибо – Khurram

0

Если вы не хотите использовать магическое число, как 20 в функции, то функция должна быть объявлена ​​как

void fireLEDs(boolean states[], size_t n); 

Для правильной работы этой функции необходимо написать, например,

for (size_t i = 0; i < sizeof(runData)/sizeof(*runData); i++) 
{ 
    fireLEDs(runData[i], sizeof(runData[i])/sizeof(*runData[i])); 
} 
Смежные вопросы