C指针相关问题记录_001
错误说明:aggregate value used where a float was expected
今天调试程序的时候见到了这个错误,记录一下
-
直接原因:
将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种数据类型,分别是- 基本类型(整型、浮点型、字符型)
- 构造类型(数组、结构体、联合体)
- 枚举类型
- 指针类型
- 空类型
参考:https://blog.csdn.net/weixin_36027342/article/details/89853197
总结:
不同数据类型之间可能不能相互转换,如结构体与基本类型就不行。
如果需要转换,应当借助指针类型的转换来进行,而不是直接转换值。

浙公网安备 33010602011771号