Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 19:01   #1
Locode
 
Регистрация: 26.03.2009
Сообщений: 7
Вопрос Квалификатор const

Кто может сказать почему в обоих прогах выводится на экран символ b, несмотря на то, что name объявлено как указатель на неизменяемую область char.
Во втором случае действительно должно вроде выводиться b. А в первом разве не должна возникнуть ошибка?

Код:
#include <iostream>
using namespace std;
int main()
{
        const char* name="aa";
        name = "bb";
        cout<<*name<<endl;
}
Код:
#include <iostream>
using namespace std;
int main()
{
        const char* name="ab";
        name++;
        cout<<*name<<endl;
}
Locode вне форума Ответить с цитированием
Старый 26.03.2009, 19:37   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Потому что const действует на то, что находится слева от него.
const char* name - эквивалентно
char const * name, т.е. указатель у нас не константный, а константны значения, а все примеры работают именно с указателями.
Попробуйте написать name[0] = 'b'; Думаю выругается, что константу меняете.
Если написать char * const name, то не должны скомпилиться ваши примеры
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц