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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
#1

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

10.10.2011, 15:29. Просмотров 1125. Ответов 19
Метки нет (Все метки)

Пожалуйста обьясните доступным языком в чем разница между объявлениями, и какие когда лучше использовать
C++
1
2
3
char a[5];
char  *c;
char b=new char[5]
в интернете много по этому поводу есть, но их сравнения я не нашел
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2011, 15:29     Вопрос про char
Посмотрите здесь:

Вопрос по Char - C++
Вот в чем суть я токо изучаю С++ токо неделю (самоучка по книге Шилдта) раньше програмировал на Паскале. Как я понял переменная типа Char...

_itoa,вопрос по char* - C++
В MSDN описана функция char *_itoa( int value, char *str, int radix ); В примере

Вопрос об особенности char и конструкторах - C++
1. Хочу вывести на экран таблицу символов ascii: #include <iostream> int main() { unsigned short T; for...

преобразвоание int в char. речь не про atoi - C++
помогите разобраться, как происходит преобразование из int в char. например: int i =1000; char k=232; cout<<(int)k;каким образом на...

Вопрос про указатели - C++
#include <iostream.h> int main() { int x; int *Pointer; pointer = &x; cout << pointer; cout << *ponter; return 0; ...

Вопрос про Swich - C++
Пример: int i=2; switch (i) { case 1: i += 2; case 2: i *= 3; case 0: i /= 2; case 4: i -= 5; default: ; } Выполнение оператора...

Вопрос про палиндромы - C++
Такая вот задачка по програмированию С++: Ввести рядок символов и составить масив слов-палиндромов (читаются одинаково с права на лево и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 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
Сообщений: 631
10.10.2011, 15:38  [ТС]     Вопрос про char #4
gooseim, да, в третьем опечатался
так вопрос что лучше использовать и при каких случаях
gitarillo
718 / 518 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
10.10.2011, 15:39     Вопрос про char #5
ЛеЖиК), все так, как сказал
diagon. Нельзя переменной типа char присвоить массив.
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
и какие когда лучше использовать
Первое для работы с массивами символов.
Второе - с указателями на символ.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
10.10.2011, 15:47  [ТС]     Вопрос про char #6
Цитата Сообщение от gitarillo Посмотреть сообщение
с указателями на символ.
разве можно использовать только один символ?
тоесть такой код неправельный
C++
1
2
char *c;
strcpy(c,"asd\0");
diagon
Higher
1928 / 1194 / 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
Сообщений: 631
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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.10.2011, 16:26     Вопрос про char #11
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
так есть какая нибудь разница между
Разница есть. Время жизни объекты `a' ограничено ближайшей областью видимости, то есть объект 'a' существует в пределах ближайших скобок { }. Для объекта `b' память выделяется в несколько другом сегменте и его время жизни ограничивается самим программистом. Если забыть очистить память вызовом delete, то объект будет существовать все время работы программы.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
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
Сообщений: 631
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
Сообщений: 631
10.10.2011, 16:33  [ТС]     Вопрос про char #16
Цитата Сообщение от gooseim Посмотреть сообщение
неизвестно число элементов
так мы же в скобках указываем количество
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Сообщений: 631
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
Еще ссылки по теме:

Вопрос про ф-ию mul - C++
Расскажите пожалуйста про ф-ию mul, перегружаемую в классе. Что она делает?

Вопрос про __function - C++
вопрос глупый, но все же: зачем в названии функциях пишут две __ - void __Plus(int a); - пример int __Display(int b) это для красоты...

Вопрос про конструктор - C++
цитата исходного кода из книги: class stock{ ... public: stock(); //Типа объявление конструктора по умолчанию чтоли... ...

Вопрос про friend - C++
Вот мой код. #include<iostream> using namespace std; class Bottle; class Carton { public: Carton(const Bottle& xBottle) {...

Вопрос про табуляцию в 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
Ответ Создать тему
Опции темы

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