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种数据类型,分别是

    1. 基本类型(整型、浮点型、字符型)
    2. 构造类型(数组、结构体、联合体)
    3. 枚举类型
    4. 指针类型
    5. 空类型

    参考:https://blog.csdn.net/weixin_36027342/article/details/89853197


总结
不同数据类型之间可能不能相互转换,如结构体与基本类型就不行。
如果需要转换,应当借助指针类型的转换来进行,而不是直接转换值。

posted @ 2022-04-26 22:53  who's_there?  阅读(286)  评论(0)    收藏  举报