56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
|
||||||
1 | ||||||
Разъясните ситуацию с ссылками.14.03.2011, 23:40. Показов 690. Ответов 9
Метки нет (Все метки)
x = 777 ir = 777 dr = 777 adress x : 12ff50 adress ir: 12ff50 adress dr: 12ff40 x = 888 ir = 888 dr = 777 adress x : 12ff50 adress ir: 12ff50 adress dr: 12ff40 Почему адрес у ir и dr разный? И почему первый раз ir и dr=777, а второй раз меняется только ir ,а адрес dr прежним?
0
|
14.03.2011, 23:40 | |
Ответы с готовыми решениями:
9
Функция get() разъясните ситуацию Разъясните ситуацию с видимостью объекта Разъясните ситуацию с возвратом объекта или ссылки на объект Разъясните ситуацию с SP1 |
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
|
||||||
14.03.2011, 23:44 | 2 | |||||
Попробую объяснить некоторые строки.
1
|
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
|
|
14.03.2011, 23:49 [ТС] | 3 |
Ну это ситуация с адресами как я понимаю. А что со значениями? почему ir дважды меняется, а dr один раз?
0
|
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
|
|
14.03.2011, 23:55 | 4 |
Мне кажется, это тоже связано с разными типами.
Попробуйте заменить double на int, что-то изменится? В общем, здесь: double &dr=x; мы присуждаем dr ссылку на x. А там у нас 777. Компилятор автоматически преобразовывает int в double. Когда мы поменяли x, dr не смогла найти правильный адрес, поэтому и не изменилась. Но я и сам не уверен.
1
|
14.03.2011, 23:59 | 5 |
У вас похоже старый компилятор. VC2008 такое не позволяет сделать.
Здесь double &dr=x компилятор создает новый безымянный объект типа double, который инициализируется значением x (именно потому, что типы отличаются). И уже на этот безымянный объект устанавливается ссылка dr. Ну, и собственно, поэтому и адреса и значения отличаются.
1
|
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
|
|
15.03.2011, 00:05 [ТС] | 6 |
Тогда как выполнить задание?)
"Описать и инициализировать некоторым значением переменную x типа int. Описать ссылки ir (типа int) и dr (типа double) и инициализировать их переменной x. Напечатать адреса переменных x, ir, dr и объяснить результаты. Изменить значение x и напечатать значения x, ir, dr. Объяснить результаты. " Я пользуюсь борланд девелопер студио 2006, там не ругается на типы.
0
|
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
|
|
15.03.2011, 00:07 | 7 |
Может, double dr = &x?
0
|
15.03.2011, 00:15 | 8 |
Ну, если в BDS2006 такое можно, так в чем дело. Результаты вы получили и напечатали. Объяснение тоже. Преподаватель, видимо, именно этого и хотел
Оффтоп VC2008 на вот это double &dr=x говорит error C2440: инициализация: невозможно преобразовать 'int' в 'double &' Добавлено через 2 минуты Это уже не ссылка, а взятие адреса переменной x. Причем в переменную double
1
|
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
|
|
15.03.2011, 00:22 | 9 |
Да, точно
0
|
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
|
|
15.03.2011, 15:19 [ТС] | 10 |
Подскажите тогда, что означает запись вида:
double &dr=(double&)x; ?
0
|
15.03.2011, 15:19 | |
15.03.2011, 15:19 | |
Помогаю со студенческими работами здесь
10
Разъясните ситуацию с исключениями Разъясните ситуацию с регулярным выражением (пример выкладываю) проясните ситуацию по кухне обмена ссылками Объясните ситуацию. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |