dubbeat
dubbeat

Reputation: 7847

newbie objective c pointer question "*" syntax

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

Answers (1)

Daniel Dickison
Daniel Dickison

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

Related Questions