разница
От: observateur  
Дата: 30.08.06 18:34
Оценка: :))
Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?
Re: разница
От: Erop Россия  
Дата: 30.08.06 18:46
Оценка:
Здравствуйте, observateur, Вы писали:

O>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?


Один из них нельзя менять
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: разница
От: observateur  
Дата: 30.08.06 19:04
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, observateur, Вы писали:


O>>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?


E>Один из них нельзя менять


это я уже знаю а подробнее можно?
Re[3]: разница
От: observateur  
Дата: 30.08.06 19:20
Оценка:
Здравствуйте, observateur, Вы писали:

O>Здравствуйте, Erop, Вы писали:


E>>Здравствуйте, observateur, Вы писали:


O>>>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?


E>>Один из них нельзя менять


O>это я уже знаю а подробнее можно?

почему указателя – константы нельзя инкрементировать ?
Re[4]: константные указатели
От: Erop Россия  
Дата: 30.08.06 19:32
Оценка: 6 (1)
Здравствуйте, observateur, Вы писали:

O>>это я уже знаю а подробнее можно?

O>почему указателя – константы нельзя инкрементировать ?

Примерно потому, почему и числа.

Вот скажем есть у тебя константа
const int two = 2;


менять её нельзя, в том числе и инкриментировать тоже.


Возможно ты путаешь константу-указатель с указателем на константу.

Правило простое.
если есть запись, скажем такая:
int **const*p;


то это обозначает, что нельзя менять то, что стоит справа от квалификатора const. В данном случае нельзя менять *p.

То есть p++, (**p)++ и даже (***p)++ допустимы, а вот (*p)++ -- нет.

Есть ещё одна особенность.
Есть нерегулярное объявление вида
const int **p;


оно всегда соответсвует регулярной записи, в которой const и имя типа просто обменялись местами.
То есть
const int **p;
int const **q;

p и q эквивалентны!


ИТОГО
int *const p;// указатель на константу p++ можно, а p[1]++ нельзя 
int const *p; // указатель-константа -- p[3]++ можно, а ++p нельзя
const int *p; // эквивалентно int const * p;
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: разница
От: DynoMEAT Россия  
Дата: 30.08.06 19:34
Оценка:
Здравствуйте, observateur, Вы писали:

O>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?



char *p;        // так обявляется указатель на char
char *const cp;        // так - константный указатель на char
char const* pc;        // а так - указатель на константу типа char


Вы, наверное, имеете в виду p и cp (указатель и константный указатель).
Разница в том, что p можно изменять после инициализации, а cp — нельзя. pc — можно изменять, но нельзя с его помощью изменять символ, на который он указывает.

Достаточно привести пример Страуструпа:

char *p;
// ... здесь инициализация p
char s[] = "Gorm";

const char* pc = s;    // указатель на константу
pc[3] = 'g';        // ошибка: pc указывает на константу
pc = p;            // правильно

char *const cp = s;    // константный указатель
cp[3] = 'a';        // правильно 
cp = p;            // ошибка: cp является константой
Re[5]: итого (верное)
От: Erop Россия  
Дата: 30.08.06 19:36
Оценка:
Здравствуйте, Erop, Вы писали:
int *const p;// указатель-константа: p[3]++ можно, а ++p нельзя
int const *p; // указатель на константу: p++ можно, а p[1]++ нельзя 
const int *p; // эквивалентно int const *p;



проврался
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: разница
От: i-maverick Россия  
Дата: 31.08.06 07:54
Оценка:
Здравствуйте, observateur, Вы писали:

O>>>>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?

E>>>Один из них нельзя менять
O>>это я уже знаю а подробнее можно?
O>почему указателя – константы нельзя инкрементировать ?

А инкремент — это не изменение?
Re[5]: разница
От: observateur  
Дата: 31.08.06 08:06
Оценка:
Здравствуйте, i-maverick, Вы писали:

IM>Здравствуйте, observateur, Вы писали:


O>>>>>Если можно очень прошу подробно обьясните мне пожалуйста в чем разница между указателем — константы и указателем -переменным ?

E>>>>Один из них нельзя менять
O>>>это я уже знаю а подробнее можно?
O>>почему указателя – константы нельзя инкрементировать ?

IM>А инкремент — это не изменение?

спасибо вам за вашу помощь и терпение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.