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

unsigned char *p=(unsigned char *)0x41E;

类型cast的用途是什么,我们可以直接使用
unsigned char *p=0x41E;

请详细解释一下,类型转换有什么用,我们是将地址(unsigned char *)本身存储到指针0x41E还是存储在指针p中?
我完全糊涂了。
请帮忙。

最佳答案

类型转换的用途是什么。(无符号字符*),在这里我们可以直接使用unsigned char *p=0x41E
0x41E是十六进制数,并不意味着它是unsigned char *类型。您应该通过将它强制转换为unsigned char *,告诉编译器它是一个地址(类型unsigned char *)。
我们是将地址“0x41e”本身存储到指针p,还是存储了其他内容。
是的,我们将地址0x41E存储到指针p。通过执行unsigned char *p = (unsigned char *)0x41E,您将通知编译器p指向内存位置0x41E,通过取消对p的引用,它将获得存储在内存位置0x41E的内容。
只需运行以下代码来检查:

#include <stdio.h>
int main()
{
    unsigned char *p=(unsigned char *)0x41E;
    printf("%p\n",p);
}

输出:
0000041E  //output is not 0x41E because '0x' is used as prefix to inform the compiler that it is a hexadecimal number

09-11 15:52