问题描述
- Byte * 作为字节数组参数,为什么返回只有8位?
-
刚接触oc,遇到一个问题,请明白的讲讲道理。
示例代码如下:
1. 在CMData类里声明了一个字节数组的属性:@property(nonatomic, assign) Byte * commandData;
- 在其他类中测试调用:
const Byte buffer[] = {1,2,3,4,5,6,7,8,9,10};
CMData * data = [[CMData alloc] init]; data.commandData = buffer;
- 打印结果
NSLog(@"-->%@", [Helper ByteArrayToString:data.commandData andWith:sizeof(data.commandData)]);
结果是只有buffer中的前8个:
1,2,3,4,5,6,7,8这种情况,不管是函数传参数还是返回值都是这样,这是什么原因?
但如果在声明完const Byte buffer[] = {1,2,3,4,5,6,7,8,9,10};后,直接sizeof buffer 是 10个。
对指针还是不太了解,请大家解答下,谢谢。
解决方案
你sizeof的是指针,所以返回的是指针的空间,32位是4,64位是8
解决方案二:
sizeof是类型的空间,不是数组中实际的元素个数
解决方案三:
参数或者返回值都会退化为指针,sizeof(p)只是指针的大小!!不是指向对象的大小!
时间: 2024-11-08 19:36:37