I’m often getting warnings about passing the wrong pointer types to functions and I just want to once and for all understand this properly.
What is the difference between these two?
CFURLRef *ref=(CFURLRef *)sourceURLArray[0];
CFURLRef ref=(CFURLRef )sourceURLArray[0];
Does the first one actually reference the memory address of the object in the array?
Does the second one make a copy of it?
The main style of code that I’m pursuing at the moment is to have an array of values or objects. I want to be able to use these values, passing them to other functions, without altering the originals.
Leading from that the 2 function declarations I have been trying are the following.
- (void) loadAudioFileIntoMemory:(CFURLRef *)address channel:(int) value row:(int) value2;
- (void) loadAudioFileIntoMemory:(CFURLRef )address channel:(int) value row:(int) value2;
What would the difference be?
CFURLRef is already a pointer — it’s declared as:
In general, you will want to use the type
CFURLRefwithout the * when declaring a variable to hold a URL. Most (or all?) of the Core Foundation objects are defined this way, and you can assume a type that ends inRefis a pointer.So if you want an array of 10 URLs, you would write something like:
What maybe makes this slightly confusing is that the Objective-C counterpart,
NSURL, does need a*to make it a pointer as with all Cocoa objects. So you’d write something like:Finally, you might find it easier to use an
NSArrayofNSURLobjects than using plain C arrays: