Программирование ARM Определения "char const *" и "const char *" - в чем разница? Mon, April 24 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Определения "char const *" и "const char *" - в чем разница? Печать
Добавил(а) microsin   

В действительности, в соответствии со стандартом на языки C и C++ (правило чтения операторов "Read Declarations Right-to-Left", т. е. надо читать всегда оператор справа налево), модификатор const влияет на элемент, слева от которого стоит const. Поэтому если использовать const перед типом, то это фактически ничего не значит, и используется просто для удобства запоминания.

const-char-bart

К примеру, следующие два оператора совершенно эквивалентны:

char const * УказательНаНЕизменяемоеСодержимое1;
const char * УказательНаНЕизменяемоеСодержимое2;

Оба указателя УказательНаНеизменяемоеСодержимое1 и УказательНаНеизменяемоеСодержимое2 указывают на строку, являющуюся константой (обычно это строка текста в памяти программ, не в RAM), и оба эти указателя можно модифицировать runtime в коде программы (т. е. значение указателя находится в RAM). Если же Вы хотели получить от указателя другое, чтобы это был постоянный указатель, который нельзя модифицировать, то нужно поместить const после звездочки (тогда получится наоборот, строка может быть изменяемой, и размещенной в RAM, а сам указатель изменить нельзя, он размещен во FLASH, в коде программы):

char * const НЕизменяемыйУказательНаИзменяемоеСодержимое;

Чтобы защитить от изменения как сам указатель, так и содержимое, на которое он указывает, то нужно использовать два ключевых слова const:

char const * const НЕизменяемыйУказательНаНЕизменяемоеСодержимое;

[Ссылки]

1. const char* and char const* - are they the same? site:stackoverflow.com.
2. Барт Симпсон Генератор картинок онлайн site:advice-dog.ru.
3. Использование описателя const в C.

 

Добавить комментарий


Защитный код
Обновить

Top of Page