Подтвердить что ты не робот

Объектив C const NSString * vs NSString * const

Я пытаюсь установить константу NSString в моем .h файле, который будет определен в моем .m. Я понимаю, что    extern NSString * const variableName; в .h и
  NSString * const variableName = @"variableValue"; - это способ сделать это. Изучая c-учебники, я вижу, что const должен идти до определений переменных. Мой вопрос в том, почему он не объявлен как extern const NSString * variableName; в .h и const NSString * variableName = @"variableValue"; в .m. Я знаю, что это не работает, потому что я сталкиваюсь с предупреждениями компилятора, которые говорят: "Передача аргумента 1 метода имя: отбрасывает квалификаторы из целевого типа указателя". Что это значит?

4b9b3361

Ответ 1

Это не то же самое. Модификатор const может быть применен к значению или указателю на значение.


int * const

Постоянный указатель (не изменяемый) на целое число (его значение можно изменить)


const int *

Изменяемый указатель на постоянное целое число (его значение нельзя изменить)


Итак, вы можете себе представить:

const int * const;

Ответ 2

Указатель константы НЕ является указателем на константу. Постоянный указатель означает, что указатель является постоянным. Например. Постоянный указатель int * const ptr2; указывает, что ptr2 является указателем, который является постоянным. Это означает, что ptr2 нельзя указать на другое целое число. Однако целое число, обозначенное символом ptr2, может быть изменено.

В то время как указатель на константу const int * ptr1; указывает, что ptr1 является указателем, указывающим на постоянное целое число. Целое число является постоянным и не может быть изменено. Однако указатель ptr1 можно указать на некоторое другое целое число.