![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
pepelaz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.12.2006 Репутация: нет Всего: нет |
все работает , но как массив b передать не по значению , а по ссылке.Подскажите пожалуйста недавно только c++ учу .никак не разберусь с этой ерундой |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Ты передешь и так по указателю, поэтомы ссылка тут не нужна
|
|||
|
||||
JAnty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
bool proverka(int a,int *b);
bool proverka(int a,int b[8]); bool proverka(int a,int b[]); Всё одно и тоже. -------------------- |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
pepelaz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.12.2006 Репутация: нет Всего: нет |
proverka выполняется для одного и того же массива который был считан вначале, а должена по идее выполнятся для массива с обновленными значениями |
|||
|
||||
sisbkoshup |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.2.2007 Репутация: -6 Всего: нет |
Имя массива и есть ссылка на первый элемент! Причем константная, поэтому нелбзя массивы присваивать друг другу в с++!!!
Т.ч. Любой массив передается по ссылке! _________________ ![]() Это сообщение отредактировал(а) sisbkoshup - 1.4.2007, 21:10 |
|||
|
||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Кто тебе сказал такую глупость? -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Константная ссылка - это некий новый элемент языка?
|
|||
|
||||
sisbkoshup |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.2.2007 Репутация: -6 Всего: нет |
Набей код:
И посмотри что будет! или если угодно:
a[2]~*(a+2)~2[a]!!!!!!!!!! И на конец попробуй присвоить массивы друг другу!!! Это говорят на лекциях в РГУ!!! _____________________ ![]() Это сообщение отредактировал(а) sisbkoshup - 1.4.2007, 21:42 |
||||||
|
|||||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
sisbkoshup, я тебе про то, что это не ссылка, а указатель константный.
Это сообщение отредактировал(а) Xenon - 1.4.2007, 21:30 |
|||
|
||||
apook |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Это сообщение отредактировал(а) apook - 1.4.2007, 21:45 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||||
|
|||||||
sisbkoshup |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.2.2007 Репутация: -6 Всего: нет |
Базара ноль указатель!!!
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Хотя Страуструп пишет, что:
Получается не вполне корректно называть arr констатным указателем? |
|||
|
||||
sisbkoshup |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.2.2007 Репутация: -6 Всего: нет |
Вполне корректно! Почему нет?
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
sisbkoshup, просто такое неявное преобразование массива в указатель при вызове функции приводит к потере размера массива, значит не совсем одно и тоже ...
|
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
sisbkoshup |
|
||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.2.2007 Репутация: -6 Всего: нет |
Два указателя одного типа можно, и нужно, складывать и вычитать, результатом будет целое! ______________ ![]() Добавлено через 4 минуты и 9 секунд
Размер передать вторым параметром! Как это все и делают!!! ____________ ![]() Это сообщение отредактировал(а) sisbkoshup - 1.4.2007, 22:26 |
||||
|
|||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Вычитать можно (и то надо делать с умом), складывать - нет. Кури умные книжки. PS: массив не есть указатель, имя массива может в ряде случаев рассматриваться как константный указатель на его первый элемент, но не более того. И физически это отнюдь не одно и то же. На RSDN этой теме даже несколько вопросов из FAQ посвящено:
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
sisbkoshup, при чем тут это. Мы говорим что это не одно и тоже, а ты вообще о другом чем-то. BreakPointMAN уже привел достаточно ссылок убедительных + Страуструпа надо читать, хотя он там об этом как-то вскользь пишет, хотя даже из "неявное преобразование" можно понять, что это не одно и тоже.
|
|||
|
||||
JAnty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
А ссылка на объект чем отличается от указателя?
-------------------- |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
![]() ![]() ![]() -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
JAnty |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
![]() Значит:
Будем считать, что я понял. ![]() -------------------- |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
всплыл этот вопрос.
Возможно ли создать полноценную ссылку на массив, чтобы и sizeof правильно работал, и в функцию ее можно было передать?
|
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Я так понимаю что не возможно такое а еще вот то что в функции sizeof-ом не получается воспользоваться, он возвращает размер указателя тож неприятность -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
А как же это:
![]() Я и вдругих книгах читал про это - у Крупника, например, "Язык Си". Добавлено через 8 минут и 10 секунд Наверно имелось в виду, что имя массива - это указатель на его первый элемент, а не ссылка ? -------------------- i_i (';') (V) ![]() |
|||
|
||||
zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Voldemar2004, только не надо снова подымать эту тему, целая война была, может вернемся к вопросу:
попробую пояснить подробнее:
если такую ссылку создать невозможно, то почему? |
||||
|
|||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
да, наврал немного, ну не суть, пусть будет так:
спасибо, верю на слово ![]() |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Да, что ни говори, шаблоны - сила. Никому за C++ templates не угнаться. Для тех, кто их не любит, предлагается куда менее изящный вариант:
Это сообщение отредактировал(а) Ulysses4j - 11.6.2007, 13:15 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
в принципе даже так проканает
Ulysses4j, твой вариант скомпилится только для известного размера массива. Это сообщение отредактировал(а) Fazil6 - 11.6.2007, 13:19 |
|||
|
||||
_stranger_ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: 2 Всего: 2 |
а если вот так
|
|||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Fazil6, мне кажется, что выполнение условия: "размер массива известен на стадии компиляции" (если я правильно понял твои слова) - необходимо для обеих вариантов - шаблонного и нешаблонного. Другое дело, что для массивов разных размеров мой вариант, действительно не подойдет. В случае шаблона генерируется много функций, каждая из которых вроде эквивалентна тому, что я предложил.
Я не спорю, что шаблонный вариант куда более расширяемый и удобный ![]() Это сообщение отредактировал(а) Ulysses4j - 11.6.2007, 13:27 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
так, но я имел в виду. что нельзя написать
и поэтому для каждого отдельного массива разной размерности придется писать свою функцию, что вобщем-то несовсем входит в условие задачи. Какой смысл определять размер массива внутри функции если он и так жестко задан в объявлении параметра этой функции? |
|||
|
||||
Ulysses4j |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Мне кажется, именно жесткость здесь и желанна: внутри функции хочется быть уверенным, что мы имеем массив определенного размера. В отличие от распространенного подхода:
- где нам могут подсунуть что-угодно, в случае с ссылками цифры не врут. Если на протяжении программы функция вызывается для массива одной и той же длинны, заданной константами, то все нормально - это полностью эквивалентно шаблонному варианту. Под эквивалентностью понимается следующее: если захочется изменить размеры того массива, с которым работает функция - нужно придать новые значения константам и перекомпилировать весь файл - здесь важно, что константы должны находиться в одной единице трансляции, что и вызывающий код и, к тому же, в одной единице трансляции, что и определяемая функция. С шаблонами история такова, что нужно весь шаблон включать в клиентский код (естественно, опять же все вместе перекомпилируется). Еще неизвестно, что удобней. Это сообщение отредактировал(а) Ulysses4j - 11.6.2007, 13:49 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
||||
|
|||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
так причем здесь определение размера? Он ведь известен... В твоем варианте проблема как таковая не стоит.
это ведь тоже самое что и
|
||||
|
|||||
Ln78 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
||||
|
||||
zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Всем спасибо, за столь развернутые примеры!
Но полное понимание сего вопроса еще не пришло, посмотрите плиз примерчик:
на отмеченной проблемной строке компилятор VC7.1 выдает ошибку:
Это особенность компилятора, или это и не должно работать? |
||||
|
|||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
zkv, MinGW скомпилировал. VC++ (я восьмеркой пробовал - та же история) выделывается: ссылка - это хоть и константа, но константы бывают времени компиляции и времени выполнения. И если у компилятора не получается на этапе компиляции определить, то надо оставлять на потом. Возможно, правила более хитрые, и я чего-то не понимаю.
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
у меня VC 80 проглотил нормально. Насчет VC71. Здесь всетаки оператор и видимо какая-то шняга получается с преобразованием массива к указателю (как в параметрах функции) Дальше имя массива не lvalue , а чтобы инициализировать ссылку сущностью, которая не является lvalue, эта ссылка должна быть константной (блин задвинул... короче только const ссылки позволяется инициализировать себя не lvalue). Так что понять его можно, хотя повторяю, что 80 схавал нормально |
|||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Ух-ты, тогда я уточню, что у меня не захотел компилировать этот код с такой же ошибкой компилятор MS Visual C++ 8.0 из состава VS Express Edition. Хотя я все время думал, что сам компилятор EE ничем от оного из "большой" VS не отличается. Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 07:28 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
Ln78 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Я пробовал тоже на восьмёрке, профессиональной, выдалась та же ошибка, что и у zkv. Пробовал менять настройки в проекте, что-то не получилось. Пробовал обмануть компилятор в 2 этапа:
был наказан тем, что, хотя и не получил ни одного ворнинга, получил неправильно работающую функцию. Ничего лучше, чем
придумать не сумел. Вряд ли это то, что нужно zkv, но, возможно, кому-нибудь и пригодиться. Это сообщение отредактировал(а) Ln78 - 12.6.2007, 08:09 |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
не будет. Это же совсем не то, что ты хочешь, насколько я понимаю. Обычно данные проблемы решаются с помощью указателей:
Неужели так необходимы ссылки? |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
да я наврал много, сразу намека Daevaorn'a не понял ![]() обычно так и делал, но вот вспомнил слова Страуструпа, что указатели в С++ всегда можно заменить ссылками (где-то он такое говорил...), и решил раскопать, как это делается в таком случае ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
Mag |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
почему это? Правильно выше расписали! --------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |