Звездочка иногда по типу переменной, иногда по имени переменной. Зачем? - PullRequest
3 голосов
/ 16 марта 2010

В Objective-C я видел, например:

UIPickerView *tweetPicker

и

UIPickerView* tweetPicker

Что означает звездочка (я знаю, первая часть - обманка ...) и почему она используется в разных частях декларации в разных контекстах?

Ответы [ 2 ]

14 голосов
/ 16 марта 2010

В конкретном случае, который вы показываете, нет никакой разницы. Некоторым людям нравится думать, что tweetPicker имеет тип UIPickerView *, то есть указатель на UIPickerView. Эти люди обычно пишут это как

UIPickerView* tweetPicker;

Другие люди предпочитают думать об этом, как *tweetPicker - это UIPickerView, то есть разыменование указателя дает UIPickerView. Эти люди обычно пишут:

UIPickerView *tweetPicker;

Я предпочитаю последнее, потому что синтаксис C (и Objective-C из-за этого) поддерживает его лучше. Возьмем, к примеру, следующие объявления переменных:

int* a, b, c;
int  *a, *b, *c;

На первый взгляд, начинающий программист C (или Objective-C) может сказать «это одно и то же», но это не так. В первом случае b и c являются обычными целыми числами, во втором случае они являются указателями. a является указателем в обоих случаях.

С моей точки зрения, концепция «типа» в любом случае настолько слаба в C (что с поведением приведения типов и т. П.), Что расширение этой концепции на один шаг дальше к переменным-указателям сводит с ума - особенно с помощью автоматического конверсии в и из void * или id, которые вы получаете.

1 голос
/ 16 марта 2010

Звездочка указывает, что переменная является указателем. В объективе-C все объекты представлены через указатели.

Что касается того, где он находится, это стиль. Мой личный стиль на самом деле с пробелами вокруг звездочки.

UIPickerView * tweetPicker

Во всех трех случаях они означают одно и то же, но с разными стилями.

Edit: интервал не имеет значения, но позиция имеет значение в угловых случаях, связанных с ключевыми словами, например, если const относится к постоянному указателю или указателю на постоянное значение Но ваш вопрос был связан с расстоянием, которое не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...