Передача массива в массив в C

В настоящее время я столкнулся с проблемой, связанной с ИК-пультом, управляемым с помощью Arduino Uno.

У меня есть сигнал необработанных данных, содержащихся в массиве:

Samsung_power[68] = {4500, 243, .... and so on};

Из-за того, что на пульте Samsung достаточно много функций, я нахожу это намного проще, чем когда я получаю команду от UART, например, значение в диапазоне от 0 до 20, тогда число будет посмотрел в таблицу, и будет выбран подходящий исходный массив данных.

Так:

FunctionArray[20] = {Samsung_power, Channel_1, Channel_2, Channel_3.. etc};

Тем не менее, компилятор не случайно позволил мне сделать это, и поэтому я могу представить, что здесь что-то совершенно не так:). Поэтому я надеялся, что у некоторых из вас есть идея, как решить эту конкретную проблему:

ПСЕВДОКОД:

receive = UART_READ();
sendRawDataToIRLED(FunctionArray[receive]);

4 ответа

Если вы не хотите объявлять вспомогательную структуру, вам нужен хотя бы массив для хранения размеров массивов данных и передачи такой длины функции. Вы можете удобно использовать sizeof, чтобы гарантировать, что они правильно вычислены. Я пробовал следующий код в Arduino и он строит:

#include "Arduino.h"

//bii:#entry_point()
void setup(){
}
void sendRawDataToIRLED(int array[], int len){
//your code here
}
void loop()
{
    int Samsung_power[] = {4500, 243, 23};
    int Channel_1[] = {450, 23, 233, 44, 55};
    int* FunctionArray[2] = {Samsung_power, Channel_1};
    int sizeArray[] = {sizeof(Samsung_power)/sizeof(int), sizeof(Channel_1)/sizeof(int)};
    int index = 0;//whatever your index
    sendRawDataToIRLED(FunctionArray[index], sizeArray[index]);
}

Вы НЕ МОЖЕТЕ делать массив функций, НО вы можете делать массив POINTER TO FUNCTION. но функция в массиве должна иметь тот же входной параметр.

см. Как я могу использовать массив указателей на функции?

Определить struct который имеет в качестве первого поля массив, который будет содержать ваш Samsung_power в массиве в структуре.

Синтаксис объявления массива массивов в C довольно прост:

int twodee[OUTER_SIZE][INNER_SIZE];

Поиски так же просты:

twodee[3]; // This is the 4th INNER_SIZE-element array in the table.
           // It's of type int[INNER_SIZE].

Если все массивы в вашей таблице поиска имеют одинаковый размер, используйте это. Если это не так, вам понадобится способ указать таблицы разных размеров с помощью таблицы. Лучший способ сделать это с помощью структур:

struct array
{
    int len;
    int data[];
};

struct array *table[NUMBER_OF_ARRAYS];

Таким образом, вы можете заполнить таблицу указателями на массивы и отслеживать размеры массивов, на которые указывают. Чтобы назначить struct array a к таблице поиска, просто сделайте это:

table[n] = &a;
Другие вопросы по тегам