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

发布于 2024-12-20 22:14:30 字数 253 浏览 1 评论 0原文

在 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) {
   ...
}

先感谢您!

Is something like this possible in C++ (on Arduino)?

#include "stdio.h"

String str = "foo";

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

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

int main(void) {
   ...
}

Thank you in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

转瞬即逝 2024-12-27 22:14:30

如果您使用 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) {
   ...
}

If you are using c++, the correct solution is a std::vector.
You will need to look at the docs for std::vector, but here is a conversion of your code to std::vector.

You then use std::vectors the same way you use regular arrays, with the "[]" operator.

#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) {
   ...
}
过期情话 2024-12-27 22:14:30

不,您需要将 i 用作指针并在 main 中分配数组:

int *i = NULL;

// etc.

int main(void) {

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

    // etc.
}

No. You would need i to be a pointer and allocate the array in your main:

int *i = NULL;

// etc.

int main(void) {

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

    // etc.
}
诗酒趁年少 2024-12-27 22:14:30

我知道这不是您所希望的,但我只会做一些不优雅的事情,如下所示:

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

I know it's not what you were hoping for, but I would just do something inelegant like this:

String str = "foo";
#define MAX_POSSIBLE_LENGTH_OF_STR 16

...

int i[MAX_POSSIBLE_LENGTH_OF_STR];

The idea is that you allocate more space for the array than you actually need, and just avoid using the extra parts of the array.

Alternatively, if you aren't going to be changing the definition of str in your source code very often, you could save some RAM by doing this:

String str = "foo";
#define LENGTH_OF_STR 3

...

int i[LENGTH_OF_STR];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文