解释char ch = *(char *)&d

double d = 3.1416;

char ch = *(char *)&d;

cout<<ch<<endl;  

 
  
现有两个基本点:

1 double一般是8字节(32位和64位操作系统)

2 char是1个字节。



现在来解释char ch = *(char *)&d;

1 &d : 就是取d的内存地址。换句话说是指向8个字节的类型指针。

2 (char *)&d,将该地址由double*转换为char*,指针类型转换为指向一个字节的类型指针。

3 *(char *)&d。取该指针(char*)的值,其实换句话说是取一个字节的内存数据,并赋予数据指针类型的类型。

4 char ch = *(char *)&d。就简单了。

总结:就是取double数d的第一个字节,并转换为char类型,赋值给ch。



再次总结:注意C程序员对待任何变量,并不应该有强烈的类型约束,优秀的C程序员更应该关注的是内存布局和内存数据的访问解释。

你可能感兴趣的:(解释char ch = *(char *)&d)