我经常收到关于将错误的指针类型传递给函数的警告,我只想一劳永逸地理解这一点。
这两者有什么区别?
CFURLRef *ref=(CFURLRef *)sourceURLArray[0];
CFURLRef ref=(CFURLRef )sourceURLArray[0];
第一个实际引用数组中对象的内存地址吗? 第二个是否复制了它?
我目前追求的主要代码风格是拥有一系列值或对象。我希望能够使用这些值,将它们传递给其他函数,而无需更改原件。
由于我一直在尝试的2个函数声明,因此如下所示。
- (void) loadAudioFileIntoMemory:(CFURLRef *)address channel:(int) value row:(int) value2;
- (void) loadAudioFileIntoMemory:(CFURLRef )address channel:(int) value row:(int) value2;
有什么区别?
答案 0 :(得分:5)
CFURLRef已经是一个指针 - 它是declared:
typedef const struct __CFURL *CFURLRef;
通常,在声明用于保存URL的变量时,您需要使用不带* 的CFURLRef
类型。大多数(或全部?)Core Foundation对象都是以这种方式定义的,您可以假设以Ref
结尾的类型是指针。
因此,如果您想要一个包含10个URL的数组,您可以编写如下内容:
CFURLRef sourceURLArray[10];
//... populate the array.
// Get a particular URL out of the array:
CFURLRef ref = sourceURLArray[0];
可能会让这有点令人困惑的是,Objective-C对应的NSURL
, 需要*
才能使它成为所有Cocoa对象的指针。所以你写的东西是:
NSURL *sourceURLArray[10];
...
NSURL *url = sourceURLArray[0];
最后,您可能会发现使用NSArray
个NSURL
个对象比使用普通C数组更容易:
NSArray *sourceURLs = [NSArray arrayWithObjects:...];
NSURL *url = [sourceURLs objectAtIndex:0];