objective-c - 正确使用 sizeof 和 Byte[]

标签 objective-c

我有点力不从心,但我有以下代码(真正的代码当然有道理):

- (NSData*) dataTheseBytes:(Byte[]) bytes {
     return [NSData dataWithBytes:bytes length:sizeof(bytes)];
}

编译器警告是

Sizeof on array function parameter will return size of 'Byte *' (aka 'unsigned char *') instead of 'Byte []'

如何消除此警告(或者更确切地说,我对字节数组有什么不理解的地方)?

此外,为什么这段代码没有发生错误?一定与方法签名有关...?

    Byte bytes[3] = { byte1, byte2, byte3 };
    NSData *retVal = [NSData dataWithBytes:bytes length:sizeof(bytes)];

最佳答案

当您将 C 数组作为方法或 C 函数参数传递时,它会“衰减”为指向基础类型的指针(即 Byte[] 实际上作为 Byte *< 传递.) 因此被调用的方法/函数不知道数组中有多少个元素。

您还必须传递数组的长度,以便被调用的代码知道您想要什么。这就是为什么 +[NSData dataWithBytes:length:] 有第二个参数。

关于objective-c - 正确使用 sizeof 和 Byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249054/

相关文章:

javascript - 从 TCP 流中解析出数据段

ios - 如何在 **spriteKit** 中添加 UIView?

iphone - CS193P - 添加取消按钮到 iOS 计算器

objective-c - 具有核心数据对象的动态 UITableView 高度

ios - CATransform3D 透视图不适用于 CATransformLayer

ios - 从现有的 tableView 数据源和 Controller 创建一个 collectionView

ios - 如何在iOS中初始化整数?

ios - 如何从Objective C中的另一个类正确访问变量

ios - MKCircle 平滑调整大小

iphone - 从 UITableViewCell 调用