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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 07:31   #11
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию строки

Константная строка возникает в следующих случаях:

1. Запись текстовой константы в кавычках во всех случаях кроме присвоения начального значения массиву;
2. Явная конверсия указателя в строковый буфер (на элемент строкового буфера) к типу указателя на константный символ.

Например, в следующем случае происходит присвоение указателю адреса константной строки:


const char* message = "Hello world!";

В следующем случае происходит не присвоение адреса константной строки, а инициализация буфера:


const char message[] = "Hello world!";

По поводу на какой элемент сегмент, область, памяти -указатели средство работы с адресами.
Благими намерениями вымощена дорога в ад
mazak вне форума Ответить с цитированием
Старый 23.07.2009, 10:58   #12
JOFRIF
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 164
По умолчанию

Цитата:
const char message[] = "Hello world!";

В следующем случае происходит не присвоение адреса константной строки, а инициализация буфера:
то-есть строка в данном случае помещается в буфер а не в память ?
JOFRIF вне форума Ответить с цитированием
Старый 23.07.2009, 13:05   #13
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от JOFRIF Посмотреть сообщение
Спасибо, теперь понятно.

Но насчет этого как то не до конца понимаю
1)На этапе компиляции размещает в Вашей программе строку "123"(в области данных) - понятно.
2)char *s = указатель на "123" - Это указатель на область/сегмент памяти, или на первый элемент?
Указатель по своей сути есть ни что иное, как адрес какой-то ячейки памяти. Одной. Невозможно указывать на область. То есть s будет указывать на ячейку с первым символом строки. Остальные символы будут идти прямо за первым, в самом конце будет аскишный 0('\0'), дабы было ясно где конец строки.
netrino вне форума Ответить с цитированием
Старый 23.07.2009, 13:22   #14
JOFRIF
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 164
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Указатель по своей сути есть ни что иное, как адрес какой-то ячейки памяти. Одной. Невозможно указывать на область. То есть s будет указывать на ячейку с первым символом строки. Остальные символы будут идти прямо за первым, в самом конце будет аскишный 0('\0'), дабы было ясно где конец строки.
Большое спасибо!
Вы наконец ответили на этот вопрос который мучал меня.
Теперь, если сложить весь "пазл" то получается вот что:

char *s = "123";

1)Компилятор помещает строку в память(В данном случае выделяет 4 последовательных ячейки - 4 байта на всю строку).
2)Компилятор возвращает адрес первого символа (куда он поместил строку)
3)Затем этот адрес присваивается указателю на тип char
4)Теперь у нас есть адрес первой ячейки памяти и мы можем работать с отдельными символами строки.

Если все это правильно то я наконец понял .
Всем большое спасибо.
JOFRIF вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по строкам в паскале NEMO1991 Паскаль, Turbo Pascal, PascalABC.NET 2 07.06.2009 13:14
Народ,зацените!Вопрос по строкам с++ Познающий Общие вопросы C/C++ 32 12.05.2009 20:16
вопрос по строкам CraZZy RabbIt Общие вопросы Delphi 4 21.04.2009 19:00
Вопрос по Visual Basic 6. С.М.С Помощь студентам 7 08.03.2009 13:51
Вопрос по Visual C++ TheLostOne Visual C++ 4 12.02.2009 00:23