我读了这段宏(C代码)并且在解码它时很困惑,知道它定义了什么。它定义了什么?
#define sram (*((unsigned char (*)[1]) 0))
-AD
答案 0 :(得分:12)
我认为sram
的意思是“RAM的开始”。
unsigned char[1]
大小为1的无符号字符数组。
unsigned char(*)[1]
大小为1的pointer to an array无符号字符。
(unsigned char (*)[1]) 0
将0转换为指向未签名字符大小为1的数组的指针。
*((unsigned char (*)[1]) 0)
读取位置0处的一些内存,并将结果解释为无符号字符大小为1的数组。
(*((unsigned char (*)[1]) 0))
#define sram (*((unsigned char (*)[1]) 0))
将变量sram
定义到从位置0开始的内存,并将结果解释为大小为1的无符号字符数组。
答案 1 :(得分:1)
我认为它返回内存(RAM)的基地址(0):)
答案 2 :(得分:1)
它将“sram”定义为从零开始的内存指针。您可以通过指针访问内存,例如sram [0]是地址0,sram [1]是地址1的东西,等等。
具体来说,它是0,它是一个指向unsigned char数组的指针,并通过它间接传递(留下一个unsigned char数组)。
可以通过
获得类似的结果#define sram ((unsigned char*)0)
它在标准C中也是完全未定义的,但这并不能阻止人们使用它并让天使飞出他们的肚脐。