c - 指向数组的全局指针

标签 c arrays global local arduino

看来我仍然没有正确理解 C 中的指针。

我希望全局数组(指针)j 的长度是动态的。

我有这个(Arduino)代码

unsigned int* j;

void setup() {

  Serial.begin(9600);

  initj();

  Serial.println(j[0]); //111 -> right
  Serial.println(j[0]); //768 -> wrong!
  Serial.println(j[1]); //32771 -> wrong!
}

void initj() {
  unsigned int i[2];
  i[0] = 111;
  i[1] = 222;

  j = i;

  Serial.println(j[0]); // 111 -> right
  Serial.println(j[1]); // 222 -> right
}

void loop() {
}

我怎样才能正确地做到这一点?

提前致谢!

最佳答案

您的initj() 函数将j 设置为指向本地 数组。这个数组的生命周期仅限于函数调用本身,一旦函数返回,指针就不再有效。因此,尝试取消引用 jundefined behaviour .

我不知道你到底想做什么,但三种可能性是:

  1. 改为在全局范围内声明 i
  2. i 声明为 static
  3. 使用malloc 动态分配数组(可能不适用于嵌入式平台)。

关于c - 指向数组的全局指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466240/

相关文章:

c - fopen 返回 null 并且 perror 打印无效参数

c - 如何从 C 宏的值生成 char 字符串?

c - 如何使用c将目录的文件名添加到数组结构中

arrays - 将带有嵌套数组和对象的 JSON 数据解码为 Go 结构

c++ - 作为 OpenMP pragma 的结果的中间代码

c - 声明一个未知大小的数组

c - 为什么 "unused attribute"为结构数组生成警告?

php - php中的静态变量和全局变量有什么区别?

c++ - C++ 中全局函数中的静态常量

c - free() 到全局链表 C