我有点力不从心,但我有以下代码(真正的代码当然有道理):
- (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/