我读了这段宏(C代码),但是在解码时不太理解它定义的是什么。它定义了什么?
#define sram (*((unsigned char (*)[1]) 0))
-AD
我认为sram
的意思是"随机存取存储器的起始位置"。
unsigned char[1]
unsigned char(*)[1]
一个大小为1的无符号字符数组指针。
(unsigned char (*)[1]) 0
*((unsigned char (*)[1]) 0)
读取位置0处的一些内存,并将结果解释为一个大小为1的无符号字符数组。
(*((unsigned char (*)[1]) 0))
只是为了避免 1+5*8+1==42。
#define sram (*((unsigned char (*)[1]) 0))
将变量sram
定义为从位置0开始的内存,并将结果解释为大小为1的无符号字符数组。
我认为它返回内存(RAM)的基地址(0) :)
它将"sram"定义为从零开始的内存指针。您可以通过指针访问内存,例如sram [0]是地址零,sram [1]是地址一处的内容等。
具体来说,它将0强制转换为指向无符号字符数组的指针,并通过该指针间接访问(留下一个无符号字符数组)。
类似的结果可以通过以下方式获得
#define sram ((unsigned char*)0)
这在标准的C语言中也是完全未定义的,但这并不能阻止人们使用它,并让天使从他们的肚脐飞出来。