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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 13:32   #1
JOFRIF
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 164
По умолчанию Строки (MS Visual c++)

Здраствуйте!
В данный момент учу строки и массивы строк.
Я не понял, как может хранится строка в указателе?
Цитата из книги:

Код:
char *message = "What a good c++ am I.";
Объясните пожалуйста что значит это строка.
JOFRIF вне форума Ответить с цитированием
Старый 10.07.2009, 13:54   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

В памяти размещается "What a good c++ am I." потом message интерпритируется как адрес (указатель) на этот участок памяти, и работаете вы с этим участком как с char*
BOBAH13 вне форума Ответить с цитированием
Старый 10.07.2009, 14:06   #3
JOFRIF
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 164
По умолчанию

Цитата:
В памяти размещается "What a good c++ am I." потом message интерпритируется как адрес (указатель) на этот участок памяти, и работаете вы с этим участком как с char*
А *message это указатель на "неограниченный" участок памяти?
То-есть, какой бы длины не была бы строка все равно уместится?

Я спрашиваю потому что, если создать строковой массив,
вот такой например: char message[100] то сюда "влезет" 99 символом без НУЛЬ.
JOFRIF вне форума Ответить с цитированием
Старый 10.07.2009, 14:18   #4
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

Цитата:
А *message это указатель на "неограниченный" участок памяти?
нет. *message указывает на первый символ этой строки.

Цитата:
То-есть, какой бы длины не была бы строка все равно уместится?
Покуда хватит памяти.

Цитата:
Я спрашиваю потому что, если создать строковой массив,
вот такой например: char message[100] то сюда "влезет" 99 символом без НУЛЬ.
char message[100] - этим ты просто резервируешь сто байт памяти под строку. message в этом случае так же является указателем на первый байт данных. только теперь ты можешь изменять эти данные.
Goblin вне форума Ответить с цитированием
Старый 10.07.2009, 14:18   #5
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

Цитата:
Сообщение от JOFRIF Посмотреть сообщение
А *message это указатель на "неограниченный" участок памяти?
То-есть, какой бы длины не была бы строка все равно уместится?
Я думаю длина такая же, как и у обычной переменной типа char, а именно
Цитата:
char
Значения в диапазоне от -128 до 127. Обычно используется для хранения букв алфавита
(взято с http://programmersclub.ru/04/)
Rembo вне форума Ответить с цитированием
Старый 10.07.2009, 14:19   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Я спрашиваю потому что, если создать строковой массив,
вот такой например: char message[100] то сюда "влезет" 99 символом без НУЛЬ.
Влазит как раз 100, индексирование массива начинается с 0.
Код:
char c[3];
c[0] = 'a'; // первый елемент
c[1] = 'b'; // второй
c[2] = '\0'; // третий
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 10.07.2009, 14:29   #7
JOFRIF
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 164
По умолчанию

Спасибо Goblin, за ясный ответ.
ISergeyN ты прав очепятка вышла .
Всем спасибо .
Тему можно закрывать.

Последний раз редактировалось JOFRIF; 10.07.2009 в 14:32.
JOFRIF вне форума Ответить с цитированием
Старый 10.07.2009, 14:41   #8
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

Цитата:
char message[100] - этим ты просто резервируешь сто байт памяти под строку. message в этом случае так же является указателем на первый байт данных. только теперь ты можешь изменять эти данные.
поправка.

char str[] = "HELLO!\n" и char *str = "HELLO!" не одно и тоже.
в первом случае str++ вызовет ошибку во втором нет.

Может кто знает почему?

Последний раз редактировалось Goblin; 10.07.2009 в 14:44.
Goblin вне форума Ответить с цитированием
Старый 10.07.2009, 16:08   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Goblin
char str[] = "HELLO!\n" и char *str = "HELLO!" не одно и тоже.
в первом случае str++ вызовет ошибку во втором нет.

Может кто знает почему?
Ну потому что имя массива указывает на его начало и не может стоять в левой части выражения.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.07.2009, 17:08   #10
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

[QUOTE]Ну потому что имя массива указывает на его начало и не может стоять в левой части выражения.[QUOTE]

Да. но разве здесь str не обычный указатель на первый байт?

char str[] = "HELLO";
Goblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Basic (Visual Studio 2005) JUDAS О форуме и сайтах клуба 1 04.07.2009 23:09
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? iukash Visual C++ 8 17.04.2009 22:36
Visual c++ 2005 и Visual c++ 6 это разные версии или нет? Руслантус Свободное общение 3 30.11.2007 19:42