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