[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的指针取值的长度不一样。