【发布时间】:2021-06-14 07:31:10
【问题描述】:
• 声明一个指针,
int *p;
• 将 I/O 内存位置的地址分配给 指针
p = (int*) 0x30610000;
我想访问内存位置0x30610000,它有一个我想配置的寄存器。
为什么要键入强制类型转换呢? p =0x30610000; 不应该指向该位置吗?
【问题讨论】:
-
尝试在没有强制转换的情况下进行编译,看看编译器是怎么说的。
-
“初始化使指针从整数变为没有强制转换”。我无法理解为什么当我输入 cast 时它会起作用。
-
好的,现在搜索该错误消息并阅读它。我想说的是,您可以在发布新问题之前进行基础研究。很多时候,它会比发帖更快,并且学习进行有效的研究是一项有用的技能。
-
好的,我理解为什么我们需要类型转换指针的概念。在此,RHS 是我想要访问的地址,为什么不强制转换它就无法工作。我能找到的是,最初的十六进制值是一个数字,类型转换是让它成为一个地址。我希望得到更详细的解释。
-
0x30610000是一个整数。将整数分配给指针通常是错误的,至少应该生成编译器警告。将其显式转换为指针向编译器表明您希望将其解释为指针,并且它不仅仅是一个错误(通常是这样)。因此,它完全符合您的要求。