Форум программистов, компьютерный форум CyberForum.ru

Вопрос про char - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 15:29     Вопрос про char #1
Пожалуйста обьясните доступным языком в чем разница между объявлениями, и какие когда лучше использовать
C++
1
2
3
char a[5];
char  *c;
char b=new char[5]
в интернете много по этому поводу есть, но их сравнения я не нашел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.10.2011, 15:35     Вопрос про char #2
Первое - статический массив из 5 элементов.
Второе - указатель на символ.
Третье - некорректно.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 15:36     Вопрос про char #3
C++
1
2
3
char a[5]; //статический массив из 5 элементов
char  *c;  //указатель
char b=new char[5]  //ошибка, надо char *b=new char[5] - динамический массив
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 15:38  [ТС]     Вопрос про char #4
gooseim, да, в третьем опечатался
так вопрос что лучше использовать и при каких случаях
gitarillo
 Аватар для gitarillo
716 / 516 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
10.10.2011, 15:39     Вопрос про char #5
ЛеЖиК), все так, как сказал
diagon. Нельзя переменной типа char присвоить массив.
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
и какие когда лучше использовать
Первое для работы с массивами символов.
Второе - с указателями на символ.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 15:47  [ТС]     Вопрос про char #6
Цитата Сообщение от gitarillo Посмотреть сообщение
с указателями на символ.
разве можно использовать только один символ?
тоесть такой код неправельный
C++
1
2
char *c;
strcpy(c,"asd\0");
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.10.2011, 15:50     Вопрос про char #7
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
разве можно использовать только один символ?
Неправильный, потому что c указывает на мусор.
Если он будет указывать на выделенную память, т.е. что-то вроде такого
C++
1
2
char * c = new char[100500];
strcpy(c, "asd");
то корректно
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 15:55     Вопрос про char #8
например
C++
1
2
3
char c;
char *cptr = &c;
scanf("%c", cptr);
так корректно.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 16:19  [ТС]     Вопрос про char #9
вроде почти разобрался
так есть какая нибудь разница между
C++
1
2
char a[5];
char *b=new char[5];
и еще вопрос, после использования и надо написать
C++
1
delete [] b;
а переменную а надо чистить?
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 16:20     Вопрос про char #10
ЛеЖиК), для b лучше писать delete[], а a сама очистится, ничего с ней делать не надо.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.10.2011, 16:26     Вопрос про char #11
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
так есть какая нибудь разница между
Разница есть. Время жизни объекты `a' ограничено ближайшей областью видимости, то есть объект 'a' существует в пределах ближайших скобок { }. Для объекта `b' память выделяется в несколько другом сегменте и его время жизни ограничивается самим программистом. Если забыть очистить память вызовом delete, то объект будет существовать все время работы программы.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 16:26  [ТС]     Вопрос про char #12
или я что не понемаю, или зачем тогда нужен new, если с char ом все просто и он сам очишается( не возникает утечек

Добавлено через 25 секунд
fasked, спасибо, разъяснил
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 16:27     Вопрос про char #13
ЛеЖиК), в основном используют new когда сразу неизвестно число элементов массива.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 16:29  [ТС]     Вопрос про char #14
и еще вопрос
если я правельно понял, то глобальные пееременные лучше объявлять с помошью new
а переменные в функцие с помошью char
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 16:31     Вопрос про char #15
ЛеЖиК), если создан статический массив n[x] глобально, то он тоже будет жить пока жива программа, как если бы он был создан с помощью new.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 16:33  [ТС]     Вопрос про char #16
Цитата Сообщение от gooseim Посмотреть сообщение
неизвестно число элементов
так мы же в скобках указываем количество
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.10.2011, 16:34     Вопрос про char #17
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
ли зачем тогда нужен new, если с char ом все просто и он сам очишается( не возникает утечек
Чтобы выделить память под статический массив его размер должен быть константой. Что бывает не всегда удобно. То есть размер массива должен быть известен в момент компиляции кода. Это нужно компилятору, чтобы он знал сколько заранее подготовить памяти.
Память, выделенная динамически с помощью оператора new, обладает большей гибкостью. Размер может быть указан не константой. Классическим примером является случай, когда пользователь может сам ввести размер массива с клавиатуры или этот размер считывается из файла.
Также динамическая память может быть использована в некоторых структурах данных, таких как связные списки.

Следует отметить, что в C++ лучше не пользоваться "нативными" указателями и напрямую работать с new. Для этого в стандартной библиотеке STL (или в других библиотеках) есть специальные контейнеры (vector, list, map, ... etc), а также умные указатели. При их использовании отпадает необходимость самостоятельно вызывать delete и память также будет освобождена автоматически.

Но это также не значит, что не надо знать, как работать с new и delete "вручную"
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 16:34     Вопрос про char #18
ЛеЖиК), указываем константу. А если переменная, то уже нельзя.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
10.10.2011, 16:34  [ТС]     Вопрос про char #19
а все понял
то есть можно использовать
C++
1
2
3
int n;
std::cin>>n;
char * b=new char[n];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2011, 16:35     Вопрос про char
Еще ссылки по теме:

Вопрос по Char C++
C++ Вопрос про классы
C++ преобразвоание int в char. речь не про atoi
_itoa,вопрос по char* C++
Вопрос про табуляцию в C++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
10.10.2011, 16:35     Вопрос про char #20
ЛеЖиК),
Yandex
Объявления
10.10.2011, 16:35     Вопрос про char
Ответ Создать тему
Опции темы

Текущее время: 11:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru