2016-02-22 2 views
-3

Сегодня, когда я печатал метод в моей Objective-C проекта, я исследовал эту строку:разница между указателями в C и Objective-C

card=self.cards[index]; 

где «карта» является указателем на экземпляр Мои класс «Карточка» (а Card - подкласс NSObject).

В C, если карта является указателем, этот синтаксис неверен, потому что я должен добавить символ '&' между '=' и именем массива.

Итак, почему это различие?

Является ли «self.cards [index]» псевдо-инструкцией метода, который возвращает указатель или нет?

Это решение, о котором я думал!

Спасибо всем!

Весь метод:

-(Card*) drawRandomCard{ 
Card *card=nil; 

if ([self.cards count]) { 
    unsigned index= arc4random() % [self.cards count]; 
    card=self.cards[index]; 
    [self.cards removeObjectAtIndex:index]; 

} 


return card; 
} 
+3

Вы должны отредактировать свой вопрос; это немного запутанно. Я считаю, что ответ 'self.cards [index]' вызывает метод в 'NSArray', но сказать сложно, так как вы не говорите нам, что такое« карточки ». – Avi

+0

Вы уверены, что 'cards' является указателем? Вы не вставляли его декларацию/определение, так что это немного сложно сказать. Но, как сказал @Avi, если это «NSArray», это немного изменило ситуацию. В противном случае это в значительной степени означает 'card = this.cards [index];' и там нет указателей. – Shark

+0

Я сказал, что «карта» - это указатель на класс Карты. – ndPPPhz

ответ

1

В C, если карта является указателем, этот синтаксис является неправильным, потому что я должен добавить в «&» характера между «=» и именем массив.

Не верно, если верно следующее:

typedef struct { 
    ... 
} Card; 

Card *cards[12]; 

или

Card *cards = malloc(sizeof(Card*) * numCards); 

то это вполне допустимо:

Card *card = cards[index]; 

В Objective-C, self.cards[index] является также массив указателей на объект pe Card.

Таким образом, они не являются , поэтому разные, в связи с этим, как минимум.

Смежные вопросы