Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по char* 
:(
    Опции темы
mes
Дата 9.9.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  9.9.2010,  16:13 Найти цитируемый пост)
 вот почему ?

Цитата

[Note: if a program could assign a pointer of type T** to a pointer of type const T** (that is, if line //1 below was allowed), a program could inadvertently modify a const object (as it is done on line //2). For example,
Код

int main() {
const char c = ’c’;
char* pc;
const char** pcc = &pc; //1: not allowed
*pcc = &c;
*pc = ’C’; //2: modifies a const object
}

—end note]




Это сообщение отредактировал(а) mes - 9.9.2010, 17:32


--------------------
PM MAIL WWW   Вверх
GrafF812
Дата 9.9.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 3.12.2009

Репутация: нет
Всего: нет



mes, а можно по-русски?
PM MAIL   Вверх
Crafty
Дата 9.9.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



GrafF812,  если  в программе было бы возможно такое присвоение  const T** = T**, то мы могли бы изменять константный объект, что невозможно по определению.

Например,
Код

int main() {
const char c = ’c’;
char* pc;
const char** pcc = &pc; // если бы это было возможно
*pcc = &c;
*pc = ’C’; //тогда тут мы смогли бы поменять значение нашей пременной const char c;
}



Это сообщение отредактировал(а) Crafty - 9.9.2010, 18:38
PM MAIL   Вверх
djamshud
Дата 9.9.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Проблему локализовать мне ума хватило. А понять, почему так происходит - нет.

mes, тут ведь ситуация обратная вашему примеру, а именно:

Код

char **ptr1;
char const **ptr2=ptr1;//fail: invalid conversion from ‘char**’ to ‘const char**’

char *ptr1;
char const *ptr2=ptr1;//win!


Почему win, мне понятно. Почему fail - нет. Это багофича языка, что он константность может "пропихнуть" только на один "слой указателей"? То есть указатель легко превращается в указатель на константу, а указатель на указатель превратиться в указатель на указатель на константу не может. Или я просто не могу понять глубокого смысла вашего примера?

Это сообщение отредактировал(а) djamshud - 9.9.2010, 19:34


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 9.9.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(djamshud @  9.9.2010,  17:51 Найти цитируемый пост)
тут ведь ситуация обратная вашему примеру, а именно:


и в чем разница ?
Цитата(djamshud @  9.9.2010,  17:51 Найти цитируемый пост)
char **ptr1;
char const **ptr2=ptr1; 

Цитата
const char** pcc = &pc; 


то что цитаты мало, вполне согласен, подробнее тут :
Qualification conversions

Это сообщение отредактировал(а) mes - 9.9.2010, 23:23


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 10.9.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Теперь понятно. Спасибо!


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
borisbn
Дата 10.9.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



djamshud, честно говоря из этих
Цитата

for every j>0, if const is in cv1,j then const is in cv2,j, and similarly for volatile.

и
Цитата

if the cv1,j and cv2,j are different, then const is in every cv2,k for 0 < k < j.

ничего не понял ( старый стал, наверное smile ).
можешь на пальцах рассказать/перевести что там за правило такое ?



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
djamshud
Дата 10.9.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



borisbn, в топку ты ссылку. Нужно просто очень внимательно посмотреть пример. Сейчас с утра у меня соображалка лучше работает, а вчера я тупил:). Собтвенно в этом примере все и есть "на пальцах".


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.