我正在使用 Keil C51 编译器对 8051 微控制器进行编程。由于某种原因,我的代码没有运行——我设法找到了这个错误,但我仍然很难理解它。与另一个相比,为什么第一个代码是错误的?值得注意的是,编译器没有抛出任何错误,代码甚至没有在微控制器上启动。
错误代码:
文件1.h
extern STRUCT_TYPEDEF array_var[];
文件2.c
// Global variable initialization
STRUCT_TYPEDEF array_var[] = some_struct.array2_var;
将这些更改为:
文件1.h
extern STRUCT_TYPEDEF *array_var;
文件2.c
// Global variable initialization
STRUCT_TYPEDEF *array_var = &some_struct.array2_var[0];
它开始工作了。
此外,这部分代码仅在“array_var[0].property = ...”之类的函数中被引用,但这些函数中没有一个被应用程序调用过。
some_struct 变量在另一个模块中声明。
为什么它会有这样的行为?[] 和 * 我不知道之间有什么区别吗?
EDIT1: 据说指针和数组是不同的东西......但是,“[]”语法与“*”有何不同?我认为编译器只会将它转换为指针,以防方括号为空(就像函数参数一样)。我还认为提供一个数组会导致给我第一个元素的地址。
现在,每个人都在说指针和数组是不同的——但我找不到任何关于它们到底有什么不同的信息。当我将数组作为右值而不是指向其第一个元素的指针时,编译器如何看待它?