![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 2 Всего: 22 |
2 Nastya: char str* - это не указатель на символ
char* str - указатель. |
|||
|
||||
| Kefir |
|
|||
|
Unregistered |
Если же быть ещё более точным, то char str* это указатель на место в памяти, где хранится символ.
|
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Искюзь ми, очипяталась -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Если быть еще более точным, то это синтаксическая ошибка. -------------------- Волны гасят ветер... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Nastya
Что, тренеруемся обучать. ;) Тогда и я добавлю. Вообще, тип char - это символ. Тип char* - это указатель на символ. Это еще не есть строка. А что такое строка? А строка - это последовательность символов. Сейчас в программировании различают два типа строк: 1. Паскалевские строки - последовательность символов, перед которой существует один или более байт(сейчас обычно 4) хранящий длинну этой строки. 2. Си-строки - последовательность символов, в конце которой стоит 0. Такие строки называют так же нуль-терменированными. Становятся популярными смешанные строки т.е. обладающие и нулем в конце и хранящие длинну строки в начале. Дело в том, что в общем случае паскалевские строки эффективнее, ибо не приходиться проходить всю строку в поисках ее конца (если вы совершаете много конкатенаций строк это особенно заметно), но поддерживать такую строку более высокоуровневая операция т. е. надо чтобы кто-то менял байты с длинной правильно выделял память, правильно интерпретировал откуда начинается сама строка и т. п. Взваливать такую работу на программиста крайне не разумно ибо это очень черевато ошибками. С - задумывался как системный язык, поэтому поддержки компилятором таких действий включенно не было это довольно таки высокоуровневая оперция не вяжется со низкоуровневыми операциями в С. Поэтому там были введены С-строки. С-строки хороши так же тем, что их очень легко стандартизировать, и следовательно легко передавать на системном уровне (например, при использовании API). Так что тип char* - это просто указатель на символ. Это не строка - но ту последовательность, которая идет за тем символом на который указывает этот указатель мы и называем строкой, а признаком ее окончания считаем нулевой символ. В Си все-таки небольшая поддержка компилятором есть, потому что когда мы пишим "строка" - то компилятор сам добавляет нулевой символ в конец. Нам не надо писать "строка\0" Тип char[] - это массив символов. Опять же это не строка, но мы можем считать его строкой (а можем и не считать). -------------------- Волны гасят ветер... |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
угу ... здорово сказано... поэтому я и люблю String strTemp; там у нас в зависимости от задачи имеется выбор варианта работы или мы все доверяем функциям класса и их скорости работы или обращаемся к его содержимому через указатель strTemp.c_str() и работаем с ним как с char-строкой... причем в любом месте можем поставить \0 или динамически изменить размер массива хранящего нашу строку через strTemp.SetLength(n); --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
! А как здесь удалить лишнее сообщение?
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Да, я тоже постоянно пытаюсь обратить внимание народа на это. То есть на классы строк - они гораздо удобнее, безопаснее и эффективнее, ибо чаще всего они являются как раз смешенными типами строк, и умеют пользоваться преимуществами обоих форматов. (хотя есть моменты когда удобнее работать непосредственно с указателем). Стандатрная библиотека С++ предоставляет класс строки std::string (который на самом деле в псевдоним для std::basic_string<char>). VC предоставляет свой класс CString, как с этим дела в Builder'е не знаю. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |