![]() |
|
Модераторы: bsa |
![]()
|
|
| semibug |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Если некоторая функция принимает указатель на char, например:
то имея массив объявленный как
можно вызвать функцию foo так:
либо так:
Причем второй способ встречался чаще. Есть ли разница в этих двух способах вызова функции? |
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Голосую за второй вариант- можно потом заменить тип array на vector или string без изменения твоего кода
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: нет Всего: 5 |
мне тоже стало интересно почему эти варианты идентичны ? я второй понял бы как передача ссылки на первый элемент массива, но вроде как передается весь массив
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
если смотреть со стороны ф-ции то передаётся, все-таки, указатель на начало массива -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
оператор индекса ведь есть и у вектора и у стринга. или что? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Если Вы имели в виду, что необходимо проверять строку на предмет empty(), то да - изменения потребуются (как, впрочем, и с вектором). Или, может, Вы имели в виду, что operator[] строки не обязан возвращать указатель на, так сказать, raw-данные строки ? В общем, хотелось бы комметариев Это сообщение отредактировал(а) borisbn - 19.11.2011, 09:25 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 3 Всего: 19 |
Голосую за первый вариант, потому что второй - напрасное усложнение.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
operator[] возвращает ссылку на элемент под этим индексом
IMHO, всё зависит от реализации контейнера, поэтому второй вариант гарантирует портабельность кода, а первый нет. Это сообщение отредактировал(а) Леопольд - 19.11.2011, 11:28 -------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
а разве существуют реализации std::string/std::vector возвращающие не ссылку на элемент? нет, конечно, в Qt`ешных контейнерах это нормально, там и множество не сортированное. но это ничего. все равно никто(почти) из пользователей этого и не заметил. почти уверен в том, что и borisbn об этом не знал ;) Это сообщение отредактировал(а) boostcoder - 19.11.2011, 12:07 |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
да без разницы как сделаешь, лишь бы самому было понятно, но лучше второй вариант, так будет понятней что передаешь указатель массива, а не какую нить переменную (чисто так чтение кода упрощается со вторым вариантом).
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
существуют (законы по стандарту) реализации std::string в которых расположение элементов не плоское.. (в отличие от vector`а).. Это мы еще не впомнили про возможное отсутствие признака конца строки.. речь не о них, а о stl.. Добавлено через 2 минуты и 53 секунды поэтому конструкция типа &str[ 0 ] (для std::string) - это путь к длительному и весьма занятному времяпровождению за дебагом |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Теоретически эти данные могут быть расположены не последовательно в памяти. Мы не знаем какой внутренний механизм у стринга. Чтобы расположить данные последовательно, и завершить их нулем, существует .c_str(); Одна из вещей которая меня всегда удивляет в С++, (как впрочем видимо и в других языках), есть вещи которые работают в реале всегда, но теоретически нарушают некое правило, и тем самым вызвают бурю возражений (одну из этих вы привели). И есть обратное, когда код прямо не нарушает правило, но в реале, глючит абсолютно везде и абсолютно всегда! (хотя бы тот же самый utf-8). И это почему-то, ни у кого не вызывает бурю эмоций! |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
![]()
|
| Правила форума "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. |