使用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++ 会自动将其转换为向量。
我在函数中使用各种参数进行初始化时遇到问题。
如果我创建了一个数组 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++ 会自动将其转换为向量。