![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
![]()
Здраствуйте, я подошел к концу Главы "строки / разбор текста " и у меня возник вопрос.
Какое из следующих объявлений лучше всего использовать?(Ведь они примерно одинаковые). char *s; string s; char s[]; |
![]() |
![]() |
![]() |
#2 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
смотря где и когда что использовать.
char *s = "123"; - указатель на константную строку (изменить ее будет нельзя). string s; - класс строки. удобно использовать конкатенацию, поиск и тп, но к примеру, в файл ты такой тип строки просто так не запишешь, надо делать сериализацию (в любой момент можно получить СИ строку методом c_str()) char s[] - строка, представлена ввиде массива. грубо говоря, то же самое, что и первый вариант, только данные можно изменить
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#3 | ||
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
![]() Цитата:
Цитата:
Если взять этот пример char *s = "123"; то я понимаю его так. Это строка "говорит": присвоить тому на что указывает данный указатель строку "123", но так как у этого указателя нет адреса массива типа char (адреса первого элемента), то куда он "девает/засовывает" строку "123" и на что он указывает если у него нет никакого адреса. ![]() Буду очень признателен если вы сможете мне это объяснить. |
||
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Не совсем верно, char *s = "123"; На этапе компиляции размещает в Вашей программе строку "123"(в области данных), а затем присваивает переменной s указатель на эту строку.
Для работы со строками(модификация, конкатенация, поиск) я бы всё же советовал использовать string, так как для этого он, как и остальная часть стандартной библиотеки, и создавался. |
![]() |
![]() |
![]() |
#5 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Если с файлами работать, то имхо лучше память динамически выделять. То есть:
Код:
Код:
стринги - специальный класс строк. Имеет довольно удобные функции. Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
![]() |
![]() |
![]() |
#6 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#7 | ||
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
![]() Цитата:
Цитата:
1)На этапе компиляции размещает в Вашей программе строку "123"(в области данных) 2)char s; 3)char *s = &s; 4)*s = "123"; p.s Извините за шквал вопросов, просто хочу разобраться с этим. |
||
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
![]()
Хмм... У меня в книге написано что в данном случае char s[] компилятор сам выберет размер массива, и он выделит памяти не больше не меньше чем нужно.
|
![]() |
![]() |
![]() |
#9 | ||
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
2)char *s = указатель на "123" Цитата:
Код:
|
||
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
![]() Цитата:
Но насчет этого как то не до конца понимаю 1)На этапе компиляции размещает в Вашей программе строку "123"(в области данных) - понятно. 2)char *s = указатель на "123" - Это указатель на область/сегмент памяти, или на первый элемент? |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопрос по строкам в паскале | 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 |