Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Назначения указателя const char

Автор вопроса: user32262Ответов: 4

Верны ли следующие задания? Или любой из них создаст проблемы. Пожалуйста, предложите.

const char * c1;
const char * c2;
const char * c3;
char * c4;

c2 = c1;
c2 = c3;
c2 = c4;

Что, если я сделаю следующее, это нормально?

const char * c5 = "xyz";
char * c6 = "abc";

c2 = c5;
c2 = c6;
  • @ Kshitij Mehta - не домашнее задание, мы сталкиваемся с проблемой памяти с нашей обширной кодовой базой. Поэтому, пожалуйста, любая помощь будет оценена по достоинству. user32262 12.10.2011
  • @user Вы уже несколько раз задавали один и тот же вопрос. Мы отвечали на них снова и снова. Ваше редактирование этого вопроса ничего не добавляет. Это просто повторяет то, что вы спросили выше. David Heffernan 12.10.2011
  • Прошу прощения, если спрашиваю о том же. Может быть, мое понимание указателей неточно. user32262 12.10.2011
  • Возможно, вы могли бы попытаться объяснить то, что вы изо всех сил пытаетесь понять. Я думаю, вам нужно попробовать что-то другое, потому что этот вопрос будет получать один и тот же ответ каждый раз, когда вы его задаете! ;-) Попробуйте выразить себя другим способом, отличным от того, что вы делали до сих пор. David Heffernan 12.10.2011

cstringconstants

Ответы

Ответ 1 · рейтинг 36 · Ed Heal

Проведите в уме линию через звездочку. Слева - то, на что указывают, а справа - тип указателя.

Например

  1. const char * const p - Указатель p является постоянным, как и символы, на которые указывает p, т.е. не могут изменить как указатель, так и содержимое на то, на что указывает p
  2. const char * p - p указывает на постоянные символы. Вы можете изменить значение p так, чтобы оно указывало на разные постоянные символы. Но на что бы ни указывал p, вы не можете изменить содержимое.
  3. char * const p - Вы не можете изменить указатель, но можете изменить содержимое

и наконец

  1. char * p - Все готово

Надеюсь, это поможет.

Ответ 2 · рейтинг 9 · Mahesh

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

И они действительны, потому что указатель не является постоянным, но значение, на которое указывает указатель, является постоянным. Таким образом, указатели здесь можно переназначить, чтобы они указывали на другое место.

Ответ 3 · рейтинг 3 · David Heffernan

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

const char* - это указатель на память, которую нельзя изменить с помощью этого указателя. Ничто здесь не может обойти это. Компилятор будет возражать, если вы присвоите c4 = c1, так как это позволит обойти константу.

Ответ 4 · hege

Все они допустимы, единственная проблематичная строка - char * c6 = "abc";: здесь "abc" - константный литерал, поэтому присваивать его неконстантному указателю небезопасно и должно, по крайней мере, генерировать предупреждение, если не ошибку компиляции (я не попробуй собрать).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы