【发布时间】:2020-06-24 15:16:58
【问题描述】:
不确定我是否正确地表达了这个问题,也不确定如何最好地解释我试图回答的内容,所以请耐心等待。
当定义一个微控制器寄存器时,你会这样写:
#define io_register (*(volatile unsigned char *)0x25)
我在这里也找到了这行代码:Pass a hex address to a Pointer Variable
int *pointer = (int *) 0x00010010;
我知道指向 int 的指针被声明在 = 符号的左侧,但是为什么在它的右侧有一个类型转换 *(int )?
与 #define 相同,我知道 0x25 处的值正在被取消引用,但为什么我不能这样写:
#define io_register *(0x25)
或
int *pointer = 0x25;
我在这里缺少什么?请随时改写或更正我所犯的任何错误,但我仍在努力解决指针和寄存器问题。
【问题讨论】:
-
告诉我你能做到吗:-
float var = "abc";? -
@Lucas 是的,你可以。
-
@Lucas 它将在浮动中存储对字符串文字的引用。如果你施放
float var = (float)"abc";,你会抑制警告。 -
我亲爱的兄弟@P__J__ ,在将这个表达式写入我的代码后,我不会得到
warning,我会收到一条错误消息,指出error: incompatible types when initializing type 'float' with type 'char *'. -
@P__J__ 即使我对字符串文字进行了类型转换。类型转换后我们会得到
error: pointer value used where a floating point value was expected所以,告诉我你在说什么“它将把对字符串文字的引用存储在浮点数中。”?