使用Arduino和C ++在一个函数中输出带有数组的参数

Output parameters with arrays in one function with Arduino and C ++

我在函数中使用各种参数进行初始化时遇到问题。 如果我创建了一个数组 int params [] = {...},它就会工作。但是,如果我想直接把参数写到函数里,是行不通的。

declaration(在.h中)

void phase_an(int led[]);

in the .cpp

void RS_Schaltung::phase_an(int led[])
{
  for (size_t i = 0; i < LEN(led); i++) {
    digitalWrite(led[i], HIGH);
  }
}

如果我尝试这种方式,它是行不通的。我希望它是那样的。但是我在互联网上找不到任何相关信息。 ...: in the Arduino sketch:

RS.phase_an(RS.ampelRot, RS.ampelGelb, ..... );    <--- is there a way to do it like that?

令我惊讶的是它是这样工作的:

int p_an [5] = {RS.ampelRot, RS.ampelGelb, RS.ampelGruen, RS.rot, RS.gelb};
...................
RS.phase_an (p_an);

有人有什么建议吗?

有几种方法可以使函数接受可变数量的参数 here

但是,在您当前的代码中存在一个问题:当您将一个未知大小的本机数组作为函数的参数传递时(例如 void f(int a[])),该参数将被管理为一个指向数组的指针,并且此函数内部无法知道该数组的实际长度。我不知道 LEN() 是如何定义的,但很有可能它在您的代码中无法正常工作。

一个更安全、更实用的替代方法是使用 vector<int> 代替:

#include <iostream>
#include <vector>
using namespace std;

void f(const vector<int>& a){
    for (int i=0; i<a.size(); i++) {
        cout<<a[i]<<" ";
    }
    cout<<endl; 
}

int main() {
    vector<int> test={1,2,3,4}; 
    f(test); 
    f({1,2,3,4});
    return 0;
}

在这种情况下,您可以在函数调用中的括号之间传递多个值(例如 ({RS.ampelRot, RS.ampelGelb, RS.ampelGruen, RS.rot, RS.gelb})C++ 会自动将其转换为向量。