Я исхожу из фона Objective-C, и я пытаюсь расширить свои знания в C. Одна вещь меня смутила, но это разница между указателями в C и Obj- C. Как вы можете видеть в приведенных ниже примерах, все выглядит по-другому по-разному между обоими языками, и мне было интересно, можете ли вы объяснить, почему?C указатели против указателей Objective-C
код C работает отлично:
void myFunction()
{
int x, *pointerX;
pointerX = &x;
*pointerX = 5;
// Prints: "x is 5"
printf("x is: %i", x);
}
код Obj-C не удается:
- (void)myMethod
{
NSString *string = @"Caramel coffee", *stringPointer;
stringPointer = &string; // Warning: Assignemnt from incompatible pointer type
*stringPointer = @"Chocolate milkshake"; // Exception: Incompatible types in assignment
NSLog(@"string is: %@", string);
}
Вопрос: Почему я не могу назначить stringPointer на адрес памяти строки (stringPointer = &string;
), и почему я могу выполнить *pointerX = 5;
под C, но я не могу выполнить *stringPointer = @"Chocolate milkshake";
под Objecti в-C?
Я понимаю, что Obj-C имеет дело с объектами, а C - нет, но я не могу понять детали за кадром, почему он не работает в Obj-C. Любая помощь приветствуется. Благодаря! :)
Вы пытаетесь выяснить часть C или объект Objective-C? Из вашего вопроса, похоже, вы хотите изучить C, но вы пишете Objective-C код, который выглядит как C ... – stefanB
The C part. Прошу прощения за путаницу. Мой фон: я прочитал некоторые книги Objective-C, и теперь я читаю книги C. Меня озадачило то, как указатели работали на C, что казалось немного другим (хотя Obj-C построен поверх C). –
Я уверен, что указатели работают одинаково в C и Objective-C, я думаю, что вы запутываетесь при использовании классов Cocoa, не понимая, как их использовать. Самое простое - найти примеры, чтобы увидеть, как обычно используются классы Cocoa, которые могли бы устранить проблемы, поскольку я сказал, что проблема может быть связана с деревом классов, которое скрыто за классами интерфейса, с которыми вы имеете дело. – stefanB