什么是C中的固定地址变量

Vir*_*mar 3 c embedded pointers memory-management

我在书籍和嵌入式系统相关网站上看到了很多这样的例子.据我所知,它用于访问存储在固定内存地址中的数据.这是我在一本书中得到的例子;

unsigned char *p=(unsigned char *)0x41E;
Run Code Online (Sandbox Code Playgroud)

什么是类型转换的用途(unsigned char *),我们可以直接使用

unsigned char *p=0x41E;
Run Code Online (Sandbox Code Playgroud)

请详细解释一下,在那里使用类型转换有什么用,我们将地址0x41E本身存储到指针中p还是存储了其他内容?

我完全糊涂了.请帮忙.

Som*_*ude 5

该值0x41e不是指针,因此编译器会抱怨它。这就是为什么它必须被类型转换为指针类型。

指针是普通变量,其内容(值)是指针指向的地址。它被编译器特殊对待,以在取消引用指针时访问指针所指向的内容。

至于“固定地址变量”,许多嵌入式平台在特殊的固定地址处都有数据和/或寄存器。要访问此数据或这些寄存器,您通常使用初始化为这些地址的指针。


Lee*_*ker 5

强制转换主要是为了让编译器满意,但可能存在某些架构,其中指针地址必须转换为某种格式,而不仅仅是数字的普通位.例如,在分段体系结构中,可能存在转换中涉及的实际转换.但是,到最后的结果,(char *)0x41E只是意味着"将数字0x41E解释为指针地址",取消引用它会抓取该地址处的字符.