![]() |
|
Модераторы: bsa |
![]()
|
|
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Читаю эту книгу сейчас. И открываю для себя интересные вещи. Буду в этой теме делиться ими с вами.
1) Можно ли создать массив нулевого размера? так тельзя: char c[0]; так можно: char *cp = new char[0]; 2) Чем отличаются указатели от ссылок? помимо всего прочего поведением при присваивании: в случае указателей значение переменных не меняется
Можно ли указывать в качестве индекса массива отрицательное значение? Ответ: можно
|
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
осталось только написать почему именно так происходит
|
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Это легко объяснить - по умолчанию new вызывает malloc(). Из документации к malloc():
|
|||
|
||||
| Goliaf777 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 19.11.2008 Репутация: нет Всего: нет |
Хотел создать темму по одному вопросу но вот попалась похожая по тематике тема.Сказано:"Массивы тесно связаны с указателями но понять эту связь очень сложно".Может кто-нибудь обьяснить это или даст ссылку на статью.
Заранее спасибо |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Goliaf777, в книге Брайана Керниган, Денниса Ритчи "Язык программирования C"
отлично объясняется как указатели связаны с массивами http://www.ozon.ru/context/detail/id/2480925/ |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
а ты попробуй поискать по форуму. эта тема поднимается наверно раз в месяц. хотя само понимание прийдет при повседневном использовании C++. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
для чего все это?
|
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Два указателя, переданные вектору, задают диапазон его значений
Т.е. можно не писать много строк вида
А инициализировать вектор в одной строке! |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так зачем создавать дополнительно объект на стеке если размер массива известен наперед :
в таком случае достаточно использовать простой указатель. Это сообщение отредактировал(а) mes - 22.1.2009, 10:51 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
mes, объект arr_size я создал для того, чтобы избежать "магических чисел" в коде программы
ведь в конструкторе вектора нужно указывать 2 указателя, на начало и на конец последовательности. без него код выглядел бы так:
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну а если с массивом, то магические цифры абсолютно не оправданы:
Это сообщение отредактировал(а) mes - 22.1.2009, 17:29 |
||||||
|
|||||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
код не компилируется. даже если * поставить перед названием переменной
разве этот код будет выполняться не дольше, чем const size_t arr_size = 6;... |
||||
|
|||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
| Goliaf777 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 19.11.2008 Репутация: нет Всего: нет |
mes в великой книжке которую написал Прата и он прав по моему.
zim22 Спасибо, посмотрим |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |