Задача новичка с указателем вопрос "*" синтаксис - PullRequest
0 голосов
/ 23 ноября 2010

Я часто получаю предупреждения о передаче неправильных типов указателей в функции, и я просто хочу раз и навсегда понять это правильно.

В чем разница между этими двумя?

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;

Какая будет разница?

1 Ответ

5 голосов
/ 23 ноября 2010

CFURLRef уже является указателем - он объявлен как:

typedef const struct __CFURL *CFURLRef;

В общем, вы захотите использовать тип CFURLRef без * при объявлении переменной для хранения URL.Большинство (или все?) Объектов 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, , нуждается в *, чтобы указатель был такимвсе объекты какао.Таким образом, вы бы написали что-то вроде:

NSURL *sourceURLArray[10];
...
NSURL *url = sourceURLArray[0];

Наконец, вам может быть проще использовать NSArray из NSURL объектов, чем использовать простые массивы C:

NSArray *sourceURLs = [NSArray arrayWithObjects:...];
NSURL *url = [sourceURLs objectAtIndex:0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...