将数组传递给C中的数组

时间:2014-02-03 15:58:53

标签: c arduino infrared

我目前遇到一个问题,与使用Arduino Uno控制的红外遥控器有关。

我将原始数据信号包含在数组中:

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

由于事实上,三星遥控器上有相当多的功能,我会发现它比从UART接收命令时容易得多,比如0到20之间的值,然后是将在表中查找数字,并选择适当的原始数据数组。

所以:

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

然而,编译器绝不让我这样做,所以我可以想象这里完全错误:)。所以我希望你们中的一些人有一个想法,如何解决这个特殊的问题:

伪代码:

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

4 个答案:

答案 0 :(得分:3)

如果您不想声明辅助结构,则至少需要一个数组来存储数据数组的大小,并将此长度传递给该函数。您可以方便地使用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]);
}

答案 1 :(得分:1)

你不能做一个函数数组,但你可以做一个指向函数的数组。 但是数组中的函数必须具有相同的输入参数。

请参阅How can I use an array of function pointers?

答案 2 :(得分:0)

定义一个struct,它的第一个字段是一个数组,它将Samsung_power保存在结构中的数组中。

答案 3 :(得分:0)

在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;