【问题标题】:Extracting a 1 dimensional array from a 2 dimensional array从二维数组中提取一维数组
【发布时间】:2016-01-23 16:54:20
【问题描述】:

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

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 编译器,但我认为这个问题与此无关。

【问题讨论】:

  • However, this doesn't work. 不是一个很好的问题陈述。
  • 欢迎来到 Stack Overflow!请先阅读How to Ask页面。
  • doesn't work 是否意味着编译器错误或错误输出?只要函数void fireLEDs(boolean states[20]) 只能读取 20 个元素,runData[b] 就可以工作。由于创建 2D 数组将所有内容连续存储在内存中,这意味着如果读取超过 20 个的函数将读取 2D 数组中下一个数组中的元素跨度>
  • @Sourav Ghosh 抱歉,但没有太多声明,程序只是无法编译。给出的错误是调用“fireLEDs”函数的行上的“expected primary-expression before ']' token”。

标签: c arrays multidimensional-array arduino


【解决方案1】:

如我所见,你应该改变

 fireLEDs(runData[b][]);

 fireLEDs(runData[b]);

【讨论】:

  • 嘿,这确实可以编译,但这又引出了另一个问题。如果我想从数据中提取一个“列”,那么我会怎么做?
  • @Khurram extract 是什么意思?有很多方法。只需使用runData[b] 也可以完成这项工作。
  • 也许我只是有点困惑。无论如何,您建议的更改确实可以编译,但我会做一些测试并确保它的行为符合我的意愿。谢谢
  • @Khurram 当然,继续。 :)
【解决方案2】:

如果你不想在函数中使用像 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] ) );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2016-12-27
    • 2016-08-26
    相关资源
    最近更新 更多