假设地址0xCF800000可以自由写入:
A)两个代码产生相同结果是否正确?
int main( void )
{
volatile unsigned long *pt = (volatile unsigned long *) 0xCF800000;
*pt = 0x00000000;
}
和
int main( void )
{
(*(volatile unsigned long *) 0xCF800000) = 0x00000000;
}
B)在第一个代码中,0xCF800000之前的语句“(volatile unsigned long*)”是必需的还是冗余的?
C)在第一个代码中有一个变量pt,它有自己的地址,我在这里放了一些内容:0xCF800000。通过取消对pt的引用,计算机将获取pt(0xCF800000)的内容,“定位”该地址,并将0x00000000分配给该位置。在第二段代码中,由于没有变量,我无法确切理解它是如何工作的。看起来信息0xCF800000是“无处”。
最佳答案
您将强制转换为(unsigned long*),这对编译器来说意味着将此值视为指向unsigned long的指针,不要抱怨。
但是正如@user3386109所说,检查一下自己总是很好的。