![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
TheDestroyer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Возможно ли узнать размер динамического массива?
Похоже, что размер динамического массива узнать в C++, (у меня Borland C++) невозможно, и надо каждый раз передавать его размер как параметр. Это так? Спасибо |
|||
|
||||
Alca |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
Возможно если массив это сишная строка
Добавлено через 34 секунды В других случаях надо передавать размер массива. Добавлено через 1 минуту и 5 секунд
Это размер указателя |
||||||||
|
|||||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
один из способов избежать передачи размера в качестве отдельного параметра заключается в передачи пары итераторов на начало массива и на элемент после его конца. ещё один способ: последний элемент массива инициализировать значением-флагом, при достижении которого вы завершите итерировать его элементы. Это сообщение отредактировал(а) zim22 - 2.4.2009, 13:20 |
|||
|
||||
Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
когда ты так пишешь ты должен понимать, что ar - это не массив, это всего лишь указатель... и размер массива массива ( 1 или 1000 элементов) никак не касается указателя... а если ты хочешь узнать объем в байтах, то можно просто после выделения памяти посчитать
Это сообщение отредактировал(а) Dmi3ev - 2.4.2009, 13:14 -------------------- |
||||
|
|||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
заверни свои данные в структуру и передавай ее в функцию
Это сообщение отредактировал(а) Alca - 2.4.2009, 13:22 |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Гугл рекомендует не использовать sizeof от типа. лучше написать
Т.к. если вы вдруг измените тип переменной size, то размер будет считаться неправильно. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
еще один : использовать std::vector и отградить себя от рутинной работы по контролю за динамическим массивом. ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
а может лучше в первом байте хранить размер и не считать в таком случае ![]()
что-то вроде этого |
||||
|
|||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
TheDestroyer, используй std::vector и не ломай мозг.
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
mes, припозднился
![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
по любому у этих методов полно недостатков, лучше передавать..либо в структуре, либо просто так..без разницы
Добавлено через 2 минуты и 3 секунды а еще лучше - как сказали mrbrooks, mes используй вектор |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
размер статических массивов неявно передаётся в функцию в качестве параметра
|
|||
|
||||
ISergeyN |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 11.10.2008 Где: Україна Репутация: 2 Всего: 2 |
А если так
|
|||
|
||||
Dmi3ev |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
а зачем size другого типа, если я пишу:
хотя согласен, он может быть и беззнаковый и тд... но size в данном случае не влияет на размер одного элемента, влияние оказывает new int, соответственно как раз так писать
ненадежно! потому как, size - это количество элементов, и эта переменная будет неизменна, независимо от того какого типа будет массив и тд... 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. |