Я изучаю указатели в Obj-C. Рассмотрим следующий код:Разница указателей
char c = 'Q';
char *charPtr;
charPtr = &c;
Во второй строке мы создаем переменную указатель типа полукокса и назовите его charPtr
. По моему мнению, это всего лишь указатель на адрес памяти, который содержит некоторое значение типа char
.
В третьей строке мы присваиваем значение charPtr
(адрес памяти) другому адресу памяти, который содержит значение c
.
Мой вопрос в том, в чем разница между charPtr
и * charPtr
?
Когда я писал *charPtr = &c
есть "желтый" предупреждение - Incompatible pointer to integer conversion assigning to 'char' from 'char *'; remove &
App аварии, если запущен (exc_bad_access
)
Когда я писал **charPtr = &c;
компилятор предупредит меня с ошибкой: Indirection requires pointer operand ('int' invalid)
Резюме, я хотите знать разницу между charPtr
и *charPtr
, и что такое **charPtr
(2 звездочки).
'charPtr' - указатель типа' char * '. '* charPtr' имеет тип' char'; это объект 'char', на который указывает указатель. '** charPtr' является незаконным, потому что' * charPtr' не является указателем. –
@ KeithThompson в этом случае имеет право использовать 2 звездочки и что это значит? Благодарим вас за разъяснения. –
@Evgeniy Kleban Представьте, что у вас есть абстрактная декларация указателя T * ptr; T может быть любым типом, который является ptr, может быть указателем на объект типа T, где T - любой тип. Если T в свою очередь является типом указателя, например, char *, тогда вы получите char * * ptr. Теперь, если вы хотите объявить указатель на объект ptr, который имеет тип char **, вы должны заменить в выражении T * ptr T на char **, и вы получите char *** ptr; –