[6/4a1b] float和CGFloat混用的风险

一般意义上的混用是没有问题的,
比如
float x=5.0;
(void)printNumber:(CGFloat)number;
当调用printNumber:x的时候是没有问题的

但是如果使用float*和CGFloat*的时候混用就会出现错误
比如
float x[]={5.0,7.0};
(void)printNumber:(CGFloat*)Arr;
就会出现问题,不能够正确的传递,反向的混用也回出现错误,比如如下:
CGFloat x[]={5.0,7.0};
(void)printNumber:(float*)Arr;

错误的结果是传递过来的是野指针。在以上例子中如果单用float或者CGFloat都不会出现问题。

最终我思考出来了问题的原因,

原因很简单,因为CGFloat的定义实际上是double,所以变成指针的时候,float和double的指针取值的长度不一样。

posted @   淡引  阅读(501)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示