假设地址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所说,检查一下自己总是很好的。

09-20 18:18