如何在Arduino函数中定义全局数组的长度?

时间:2011-12-11 18:56:59

标签: c++ arrays global arduino

在C ++中是否可以这样(在Arduino上)?

#include "stdio.h"

String str = "foo";

int i[strLength()]; // <- define length of array in function

int strLength() {
  return str.length();
}

int main(void) {
   ...
}

提前谢谢!

3 个答案:

答案 0 :(得分:3)

如果您使用的是c ++,正确的解决方案是std :: vector。 您需要查看std :: vector的文档,但这里是您的代码转换为std :: vector。

然后使用std :: vectors,就像使用常规数组一样,使用“[]”运算符。

#include <cstdio>
#include <vector>

String str = "foo";

int strLength() {  // Needs to come before the use of the function
  return str.length();
}

std::vector<int> i(strLength() ); //Start at strLength


int main(void) {
   ...
}

答案 1 :(得分:2)

没有。您需要i作为指针并在main中分配数组:

int *i = NULL;

// etc.

int main(void) {

    i = (int*) malloc(sizeof(*i)*strLength());

    // etc.
}

答案 2 :(得分:1)

我知道这不是你所希望的,但我会做一些像这样不优雅的事情:

String str = "foo";
#define MAX_POSSIBLE_LENGTH_OF_STR 16

...

int i[MAX_POSSIBLE_LENGTH_OF_STR];

这个想法是你为数组分配的空间比实际需要的多,而且只是避免使用数组的额外部分。

或者,如果您不打算经常更改源代码中str的定义,可以通过这样做来节省一些RAM:

String str = "foo";
#define LENGTH_OF_STR 3

...

int i[LENGTH_OF_STR];