C/C++教程

C指针相关问题记录_001

本文主要是介绍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

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

这篇关于C指针相关问题记录_001的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!