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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Char или String ? В чём разница между этими типами? 
V
    Опции темы
hoz
Дата 29.1.2014, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Как я понимаю тип char судя по учебникам служит для хранения символов. Прочитал кроме того Статью, и всё-таки запутался.
 В статье сказано:
Цитата

Если кто не помнит, то переменная типа char хранит в себе 1 символ.

А дальше код:
Код

char name[50];

cin>>name;

cout<<"Hello "<<name<<endl;

Получается, что в массиве будет 50 элементов разером в 1 символ? Т.е. 50 символов(грубо говоря по 1-ой цифре или букве, ну или знаку разумеется каком-нить), верно?
PM MAIL   Вверх
vinter
Дата 29.1.2014, 19:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Верно. Но если ты не записывал туда символы, то там будет мусор(тоже символы, но малопредсказуемые). Тип char служит для хранения данных размеров в 1 байт(не совсем точно, но для большинства систем это так). Разумеется ты можешь хранить там как символы, так и то, что не имеет для тебя символьной нагрузки, например:
Код

char byte = 0xff;

Т.е. воспринимай char как тип размером в 1 байт и помни, что char, char*, char[], как правило, интерпретируются различными стандартными функциями как символ и строка(набор символов) соответственно. Но это не означает, что они могут интерпретироваться только так. Это вопрос использования.


--------------------
Мой блог
PM MAIL WWW   Вверх
trinitr0
Дата 30.1.2014, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тип char - это специальный объект, знимающий один байт в памяти и способный хранить небольшие целые числа 
(со знаком 'char': -128 до 127 и без 'unsigned char': 0 до 255):

Код

char a = 127;


эквивалтно:

Код

char a = 'a';



PM MAIL Jabber   Вверх
hoz
Дата 30.1.2014, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(vinter @  29.1.2014,  19:59 Найти цитируемый пост)
Верно. Но если ты не записывал туда символы, то там будет мусор(тоже символы, но малопредсказуемые).

Откуда там будет мусор то? Ведь если не инициализировать явно, то, по крайне мере, в языках программирования нулём инизиализируются переменные, НО как может быть малопредсказуемое значение то?


Цитата(vinter @  29.1.2014,  19:59 Найти цитируемый пост)
Т.е. воспринимай char как тип размером в 1 байт и помни, что char, char*, char[], как правило, интерпретируются различными стандартными функциями как символ и строка(набор символов) соответственно. 

А вот как char, char*, char[] воспринимать не как символ, а как строку для меня сложновато понять. Ведь тип в 1 байт. И изначальная трактовка использования данного типа для работы с символами.
PM MAIL   Вверх
vinter
Дата 30.1.2014, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(hoz @  30.1.2014,  11:01 Найти цитируемый пост)
 Ведь если не инициализировать явно, то, по крайне мере, в языках программирования нулём инизиализируются переменные

Ты ошибаешься. Языки программирования не надо объединять, у каждого свои правила. C++, в общем случае, ничего нулём не инициализирует. Для подобной инициализации должны быть специальные условия(глобальные переменные и т.п.)
Цитата(hoz @  30.1.2014,  11:01 Найти цитируемый пост)
А вот как char, char*, char[] воспринимать не как символ, а как строку для меня сложновато понять. Ведь тип в 1 байт. И изначальная трактовка использования данного типа для работы с символами.

C++ довольно низкоуровневый язык, в ассемблере вообще нет типов, есть разное количество памяти выделенное под некую сущность. C++ просто имеет имена для наиболее популярных размеров. Так char это имя для куска памяти размером в 1 байт. Так уж повелось, что он еще и представляет ASCII и поэтому, вероятно, называется char. Это просто принято хранить символы в char и интерпретировать переменные типа char как символьные, но это не правило, это просто традиция.

Так как набор символов представляет собой строку, то и в C++ это так: если у тебя есть массив char(char[]), то это можно интерпретировать как строку. Тоже самое с указателем. 

Это сообщение отредактировал(а) vinter - 30.1.2014, 11:35


--------------------
Мой блог
PM MAIL WWW   Вверх
borisbn
Дата 30.1.2014, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(vinter @  29.1.2014,  19:59 Найти цитируемый пост)
Тип char служит для хранения данных размеров в 1 байт(не совсем точно, но для большинства систем это так)

По стандарту
Цитата
The sizeof operator yields the number of bytes in the object representation of its operand.
...
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.

Хотя, действительно, я сталкивался с одной специфической платформой, у которой sizeof( char ) равнялся 4.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vinter
Дата 30.1.2014, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(borisbn @  30.1.2014,  17:36 Найти цитируемый пост)
По стандарту

хм, то ли раньше(в редакции 2003 года) этой строчки не было, то ли я просто запутался.


--------------------
Мой блог
PM MAIL WWW   Вверх
borisbn
Дата 30.1.2014, 17:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Doc No: N1905=05-0165
Date: 2005-10-19
Пункт 5.3.3 (Sizeof). Подпункт 1.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vinter
Дата 30.1.2014, 18:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Точно, вспомнил, это размер байта в стандарте не определён. Спасибо за напоминание.


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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