今天调试程序的时候见到了这个错误,记录一下
首先,出现这个错误的直接原因是将aggregate value(一般就是说结构体类型的值)用为a float(浮点类型的值)。
具体错误代码:
struct stru_double* p = &ace; //检查内存是否更改 printf("7%lf",(double)(*p));
出错原理:
C语言的强制类型转换只能在基本类型之间进行(或指针类型与另一种指针类型,枚举类型也能与基本类型转换),而不能将结构体类型(其他构造类型,如union应该也一样,不过我没测试)转换为数量类型。
修改方案:
如果想要按照双精度浮点格式(%lf)输出该地址的内容,那么应该使用这样的代码来输出:
printf("7%lf", *(double*)p);
即,先将指针转换为double*,然后再使用取值运算符。
延申补充:
C语言包括5种数据类型,分别是
总结:
不同数据类型之间可能不能相互转换,如结构体与基本类型就不行。
如果需要转换,应当借助指针类型的转换来进行,而不是直接转换值。