Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строковые переменные, char, char*, CString... 
:(
    Опции темы
Vaulter
Дата 17.1.2003, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



2 Nastya: char str* - это не указатель на символ
char* str - указатель.


--------------------
PM MAIL WWW ICQ   Вверх
Kefir
Дата 17.1.2003, 17:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Если же быть ещё более точным, то char str* это указатель на место в памяти, где хранится символ.
  Вверх
Nastya
Дата 17.1.2003, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Цитата
2 Nastya: char str* - это не указатель на символ
char* str - указатель


Искюзь ми, очипяталась


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Fantasist
Дата 19.1.2003, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата(Guest @ 17.1.2003, 09:28)
Если же быть ещё более точным, то char str* это указатель на место в памяти, где хранится символ.

Если быть еще более точным, то это синтаксическая ошибка.  :)


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Fantasist
Дата 19.1.2003, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Nastya
Что, тренеруемся обучать. ;)

Тогда и я добавлю. Вообще, тип char - это символ. Тип char* - это указатель на символ. Это еще не есть строка. А что такое строка? А строка - это последовательность символов. Сейчас в программировании различают два типа строк:

 1. Паскалевские строки - последовательность символов, перед которой существует один или более байт(сейчас обычно 4) хранящий длинну этой строки.
 2. Си-строки - последовательность символов, в конце которой стоит 0. Такие строки называют так же нуль-терменированными.

Становятся популярными смешанные строки т.е. обладающие и нулем в конце и хранящие длинну строки в начале. Дело в том, что в общем случае паскалевские строки эффективнее, ибо не приходиться проходить всю строку в поисках ее конца (если вы совершаете много конкатенаций строк это особенно заметно), но поддерживать такую строку более высокоуровневая операция т. е. надо чтобы кто-то менял байты с длинной правильно выделял память, правильно интерпретировал откуда начинается сама строка и т. п. Взваливать такую работу на программиста крайне не разумно ибо это очень черевато ошибками. С - задумывался как системный язык, поэтому поддержки компилятором таких действий включенно не было это довольно таки высокоуровневая оперция не вяжется со низкоуровневыми операциями в С. Поэтому там были введены С-строки. С-строки хороши так же тем, что их очень легко стандартизировать, и следовательно легко передавать на системном уровне (например, при использовании API).    
 Так что тип char* - это просто указатель на символ. Это не строка - но ту последовательность, которая идет за тем символом на который указывает этот указатель мы и называем строкой, а признаком ее окончания считаем нулевой символ. В Си все-таки небольшая поддержка компилятором есть, потому что когда мы пишим "строка" - то компилятор сам добавляет нулевой символ в конец. Нам не надо писать "строка\0"
Тип char[] - это массив символов. Опять же это не строка, но мы можем считать его строкой (а можем и не считать).




--------------------
Волны гасят ветер...
PM MAIL   Вверх
HexoGenus
Дата 19.1.2003, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата
но поддерживать такую строку более высокоуровневая операция т. е. надо чтобы кто-то менял байты с длинной правильно выделял память, правильно интерпретировал откуда начинается сама строка и т. п. Взваливать такую работу на программиста крайне не разумно ибо это очень черевато ошибками

угу ... здорово сказано...
поэтому я и люблю String strTemp;
там у нас в зависимости от задачи имеется выбор варианта работы или мы все доверяем функциям класса и их скорости работы или обращаемся к его содержимому через указатель strTemp.c_str() и работаем с ним как с char-строкой... причем в любом месте можем поставить \0 или динамически изменить размер массива хранящего нашу строку через strTemp.SetLength(n);
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
HexoGenus
Дата 19.1.2003, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



&#33 А как здесь удалить лишнее сообщение?
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 20.1.2003, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
поэтому я и люблю String...


Да, я тоже постоянно пытаюсь обратить внимание народа на это. То есть на классы строк - они гораздо удобнее, безопаснее и эффективнее, ибо чаще всего они являются как раз смешенными типами строк, и умеют пользоваться преимуществами обоих форматов. (хотя есть моменты когда удобнее работать непосредственно с указателем). Стандатрная библиотека С++ предоставляет класс строки
std::string (который на самом деле в псевдоним для std::basic_string<char>). VC предоставляет свой класс CString, как с этим дела в Builder'е не знаю.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.