#c
Понимаю: если const находится слева от * , то данные константа. Если const находится справа от * , то указатель константа. Вопрос : что означает, что указатель константа? Пишу следующее: int main() { const float* a; float g = 5; float* const b=(float*)malloc(g*sizeof(float)); b[0] = 6.4; // на это спокойно реагирует float* k = b++; //инкремент не работет return 0; } Почему же инкремент не работает ?Что означает, что указатель константа?
Ответы
Ответ 1
Понимаю: если const находится слева от * , то данные константа. Если const находится справа от * , то указатель константа. Некоторые C-программисты предпочитают следующий стиль объявления переменных (обратите внимание на первый квалификатор const: он стоит после float): float const * const * var В таком случае становится легко применять правило чтения «справа-налево»: var | переменная var — это * var | указатель на const * var | константный * const * var | указатель на const * const * var | константный float const * const * var | float Впрочем этим правило можно пользоваться независимо от выбранного стиля. Вопрос: что означает, что указатель константа? Это означает, что вы не можете изменять этот указатель! Смотрите, в чем дело. char num = 10; char * const ptr = # Здесь у нас есть две переменных: num — переменная типа char. В ячейке памяти, выделенной для этой переменной хранится число 10. ptr — константный (неизменяемый) указатель на изменяемые данные типа char. ptr «указывает» на переменную num, т. е. в области памяти, выделенной для ptr хранится адрес переменной num. ptr — неизменяемый указатель, это значит, что мы не можем сделать так, чтобы ptr указывал в какое-то другое место кроме num. Он всегда будет указывать на num и повлиять мы на это не можем (законными путями)! ptr — неизменяемый указатель на изменяемые данные, это значит, что сами данные, на которые указывает ptr мы изменить можем (т. е. можем изменить значение переменной num).Ответ 2
Во-первых, в языке С const объекты не принято назвать словом "константа". Термин "константа" в языке С означает совсем другое. 42 - это константа, 3.14 - тоже константа, ваше b - не константа, а const указатель. Во-вторых, в данном случае то, что указатель объявлен как const означает, что значение указателя нельзя модифицировать. Инкремент "не работает" потому, что инкремент пытается модифицировать указатель.
Комментариев нет:
Отправить комментарий