2 tyroshine tyroshine 于 2014.12.16 23:39 提问

Byte * 作为字节数组参数,为什么返回只有8位?

刚接触oc,遇到一个问题,请明白的讲讲道理。
示例代码如下:
1. 在CMData类里声明了一个字节数组的属性:

 @property(nonatomic, assign) Byte * commandData;
  1. 在其他类中测试调用:
 const Byte buffer[] = {1,2,3,4,5,6,7,8,9,10};
 CMData * data = [[CMData alloc] init];
data.commandData = buffer;
  1. 打印结果
 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个。
对指针还是不太了解,请大家解答下,谢谢。

3个回答

bdmh
bdmh   Ds   Rxr 2014.12.17 09:10
已采纳

你sizeof的是指针,所以返回的是指针的空间,32位是4,64位是8

tyroshine
tyroshine 恩 后来发现了
3 年多之前 回复
tyroshine
tyroshine 恩 后来发现了
3 年多之前 回复
bdmh
bdmh   Ds   Rxr 2014.12.17 09:06

sizeof是类型的空间,不是数组中实际的元素个数

jianwen0529
jianwen0529   Rxr 2014.12.17 09:16

参数或者返回值都会退化为指针,sizeof(p)只是指针的大小!!不是指向对象的大小!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!