从二维数组中提取一维数组

时间:2016-01-23 16:54:21

标签: c arrays multidimensional-array arduino

我正在尝试制作一个将某些数据读入二维数组的程序。为了测试我已经制作了这个小例子程序的功能。该变量当前被声明为固定的二维数组,并包含一些布尔数据。

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

现在,我有一个我必须传递此数据的函数,该函数将一维布尔数组作为参数:

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

所以这意味着我必须将这些数据分成4个单维数组,并将每个数据传递给fireLEDs函数。

我正在尝试执行此操作的代码是:

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

然而,这不起作用。

我对C不太好,所以这样的功能可能根本就不存在,但有些google-fu说这应该有效。

作为一个注释:我正在使用arduino编译器,但这个问题与我的想法没什么关系。

2 个答案:

答案 0 :(得分:0)

我可以看到,你应该改变

 fireLEDs(runData[b][]);

 fireLEDs(runData[b]);

答案 1 :(得分: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] ) );
}