看来我仍然没有正确理解 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
设置为指向本地 数组。这个数组的生命周期仅限于函数调用本身,一旦函数返回,指针就不再有效。因此,尝试取消引用 j
是 undefined behaviour .
我不知道你到底想做什么,但三种可能性是:
- 改为在全局范围内声明
i
。 - 将
i
声明为static
。 - 使用
malloc
动态分配数组(可能不适用于嵌入式平台)。
关于c - 指向数组的全局指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466240/