Reputation: 7847
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?
Upvotes: 0
Views: 245
Reputation: 21882
CFURLRef is already a pointer -- it's declared as:
typedef const struct __CFURL *CFURLRef;
In general, you will want to use the type CFURLRef
without 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 in Ref
is a pointer.
So if you want an array of 10 URLs, you would write something like:
CFURLRef sourceURLArray[10];
//... populate the array.
// Get a particular URL out of the array:
CFURLRef ref = sourceURLArray[0];
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:
NSURL *sourceURLArray[10];
...
NSURL *url = sourceURLArray[0];
Finally, you might find it easier to use an NSArray
of NSURL
objects than using plain C arrays:
NSArray *sourceURLs = [NSArray arrayWithObjects:...];
NSURL *url = [sourceURLs objectAtIndex:0];
Upvotes: 5