![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Если мы пишем
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
тогда в чем отличие от
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
в том, что это непосредственно переменная, а ссылка это всего лишь псевдоним для переменной. сама по себе ссылка бесполезна. она должна ссылаться на какую-то переменную, тогда она имеет смысл. Вот такой код не пройдет
а вот это уже лучше:
|
||||
|
|||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
S.A.G., ну это переменная, там ссылка ... Или я не понимаю вопроса или ты ...
|
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
2 S.A.G.
Ну вобще если не говорить про пример То & - это операция "взятия адреса" Ну к примеру
Ну примерно так. Т.е. тута созд указатель на ptr и присваивается значение 5, а затем y присваивается адрес етого ptr Вроде просто все!!!!!! |
|||
|
||||
| sergejzr |
|
||||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
int a; тоже самое, что и int &a; Только ссылка удобнее, потому что её неинициализированную создать нельзя и все операции по переадресации компилер сделает сам.
пример:
Компилер переведёт в
Т.е. меньше знаков нам писать и код читабельнее. А с вызовом функций ещё удобнее!
Намного красивее и проще писать, нежели то, что из неё сделает компилятор:
|
||||||||
|
|||||||||
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Если бы не было амперсанда, то такая запись значила бы что a - переменная и имеет значение 5. Переменная имеет адрес в памяти по которому можно разместить данные заданного в описании типа.
Что значит "псевдоним для переменной"? Что сделает компилятор в данном случае, встретив такую запись? Это сообщение отредактировал(а) S.A.G. - 8.5.2007, 01:30 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
чего??? это вообще не скомпилится... sergejzr, ссылка - это псевдоним переменной. Со всеми вытекающими. С обязательной инициализацией именем переменной, но уж никак не значением. Она не создает ничего в памяти, это заморочка компилятора, а для программиста читабельность кода может повысить...
тут все верно, но это передача по ссылке, это немного другое... Добавлено через 2 минуты и 16 секунд Ругнется... такое недопустимо. Смотри пост выше. А вообще любой учебник в зубы. |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
JackYF, объясни плиз а то я совсем запутался..
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
так.. меня осенило... ссылка - просто второе имя для переменной... при применении ее в качестве параметра функции ссылка будет "вторым именем" для фактического параметра и к нему можно будет иметь прямой доступ...
Оказываеться все так просто... я сам поначалу запутался и меня запутали... Операция "&" не имеет ничего общего с определением адреса так же само как и "*" если они употребляються в объявлении переменной... Кстати при применении ссылки в качестве параметра функции - единственный случай где ее не нужно "инициализировать" именем переменной. Это сообщение отредактировал(а) S.A.G. - 8.5.2007, 02:07 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
S.A.G., ссылка это синтаксическое упрощения указателя - компилятор, грубо говоря, сам подставляет оператор снятие косвенности. Иногда компилятор оптимизирует код так, что непосредственно объекта "ссылка" нет - просто общение с переменной идет. От указателя, вроде как, ссылка отличается еще и тем, что для простой ссылки требуется обязательно l-value и только того же типа, что и ссылка, а вот для констатной ссылки l-value необязательно и при несоотвествии типов будет неявное преобразование к типу, на который ссылается ссылка.
|
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Не слышал о таком -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
S.A.G., да что вы говорите?
|
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Впервые слышу такое название для "*". В Си не встречалось.
Это сообщение отредактировал(а) S.A.G. - 8.5.2007, 02:08 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
S.A.G., ну естественно, потому что он ее сам подставляет
|
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Да, я понял твою мысль. Просто ты несовсем корректно выразился. Ты хотел сказать что вместо ссылки компилер подставляет выражения для указателей. -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| EnergoHokum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Оператор * может применяться следующими способами:
как указатель, т.е int* a - здесь a содержит адрес какой-то переменной типа int как взятие значения по адресу, т. е. b=*a - здесь b присваивается значение, которое лежит по адресу, который лежит в a ;-) ну и простое умножение Оператор & может применяться следующими способами: как взятие адреса объекта, т. е. int* a=&b - здесь указателю a на int присваивается адрес переменной b как ссылка, т. е. int& a=int b - здесь а является ссылкой на b Для чего применяются ссылки? Ссылки применяются в основном для передачи параметров в функции по значению. В переводе с c++ на русский это означает следующее: если есть переменная, и функция, куда нужно эту переменную передать
то компилятор скопирует передаваемый параметр, и в данном примере декрементируется только decrementValue внутри самой функции, a останется неизменным. А если параметр функции объявить как ссылку
то копирования не произойдёт, и a действительно будет декрементировано после выполнения функции. Вроде бы так ;-). |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |