Форум программистов, компьютерный форум CyberForum.ru

Подмена переменных для ссылок - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 14:50     Подмена переменных для ссылок #1
В общем, такое дело: преподаватель задала вопрос, на который я не смог ответить - как сделать так, что бы ссылка инициализированная на одну переменную указывала на другую?

Мои размышления:
Ссылка не может указывать на нул, по-этому поиграться с областью видимости, как это можно делать с указателями не получиться. Так же ссылка не дает инициализировать себя на указатель, хотя это немного не по условию, но результат был бы схож. Остается, как я понимаю, только работа с памятью. Поискал, но на вопрос ответа не нашел.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 14:50     Подмена переменных для ссылок
Посмотрите здесь:

C++ Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Какие операции доступны для целочисленных переменных и недоступны для вещественных? C++
C++ C++ switch для переменных char
Написать (переделать) программу с использованием ссылок в качестве параметров функций для нахождения минимального элемента из 3-х заданных C++
Почему для обозначения ссылок используется именно символ &? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.01.2011, 17:29     Подмена переменных для ссылок #2
ссылка на ссылку
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.01.2011, 17:39     Подмена переменных для ссылок #3
Вопрос такой:
В ячейке памяти записан адрес. Как записать туда другой адрес?
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 18:13  [ТС]     Подмена переменных для ссылок #4
Цитата Сообщение от igorrr37 Посмотреть сообщение
ссылка на ссылку
А смысл? Имеется ввиду, что в любом месте программы она должна смочь указывать на другую переменную

Вопрос по теме: имя переменной тоже ссылка?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.01.2011, 18:38     Подмена переменных для ссылок #5
Я бы так переформулировал вопрос: как компилятор рассматривает имя переменной- как собственно имя или как ссылку, то есть адрес переменной?

Оказывается, двояко. Всё зависит от того КАК он использует это имя
Итак: код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void f_0 (int& per) {
}
void f_1 (int per) {
}
 
int main() {
 int per= 6;
 f_0 (per); 
 f_1 (per); 
}
Функции f_1 и f_0 вызываются с одни и тем же аргументом. Но! В первом случае компиляттор передаст функции число 6, а во втором- адрес этой шестёрки. А и в том и другом случае аргумент "per"

Уж ты поверь мне, смотрено в OllyDbg
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
04.01.2011, 19:47     Подмена переменных для ссылок #6
Цитата Сообщение от ViviSex&I Посмотреть сообщение
В общем, такое дело: преподаватель задала вопрос, на который я не смог ответить - как сделать так, что бы ссылка инициализированная на одну переменную указывала на другую?
А воспроизведи вопрос дословно. При такой постановке вопроса ответ "никак". Ссылку для того и придумали, чтобы её можно было только один раз проинициализировать. Если ты (или преподаватель) не путаешь понятия "ссылка" и "указатель".

Цитата Сообщение от kravam Посмотреть сообщение
Но! В первом случае компиляттор передаст функции число 6, а во втором- адрес этой шестёрки. А и в том и другом случае аргумент "per"
Ну и где ссылка во втором случае? И где "что бы ссылка инициализированная на одну переменную указывала на другую"?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.01.2011, 19:52     Подмена переменных для ссылок #7
Ой, мама, ой
Я перепутал

В первом случае положит в стек адрес переменной. Ссылку то бишь. А во втором значение 6.
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
04.01.2011, 20:04     Подмена переменных для ссылок #8
Цитата Сообщение от kravam Посмотреть сообщение
Я бы так переформулировал вопрос: как компилятор рассматривает имя переменной- как собственно имя или как ссылку, то есть адрес переменной?

Оказывается, двояко. Всё зависит от того КАК он использует это имя
Итак: код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void f_0 (int& per) {
}
void f_1 (int per) {
}
 
int main() {
 int per= 6;
 f_0 (per); 
 f_1 (per); 
}
Функции f_1 и f_0 вызываются с одни и тем же аргументом. Но! В первом случае компиляттор передаст функции число 6, а во втором- адрес этой шестёрки. А и в том и другом случае аргумент "per"

Уж ты поверь мне, смотрено в OllyDbg
могу ошибаться, но помоему, в вашем примере в обоих случаях мы имеем дело с объектом. На определенном уровне абстракции это выглядит как передача объекта в случае ссылки и его копирование в случае передачи по значению. Если копать ниже, то адресс ячейки используется всегда и везде как минимум для считывания.
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 20:16  [ТС]     Подмена переменных для ссылок #9
Цитата Сообщение от Evg Посмотреть сообщение
А воспроизведи вопрос дословно.
Увы не смогу. Смысл сохранил.
Цитата Сообщение от Evg Посмотреть сообщение
Если ты (или преподаватель) не путаешь понятия "ссылка" и "указатель".
Да, вроде, не должны ни я ни она. С указателем было бы все просто.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 20:37     Подмена переменных для ссылок #10
Вообще ссылка в некотором контексте тоже может обозначать указатель. Например нет такого понятия "передача параметра в функцию по указателю", есть понятие "передача по ссылке". А вот какие средства используются для того, чтобы передать по ссылке, это уже чётко указывается, например "Передача параметра по ссылке с помощью указателя" или "Передача параметра по ссылке с помощью ссылки".
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.01.2011, 21:08     Подмена переменных для ссылок #11
Цитата Сообщение от vx5 Посмотреть сообщение
Если копать ниже, то адресс ячейки используется всегда и везде как минимум для считывания.
Да, так. Но я бы не стал обращать на это внимание автора, дабы не запутать и ограничился тем уровнем углубления, которым ограничился. Я, кстати, делал в похожей теме скриншот отладчика и выкладывал его сюда и стек там показывал и что лежит на его верхушке. Щас мне этой темы, естессно, не найти.

А вот моя тема, может, пригодится.
Переменные ссылочного типа. Просьба разжевать и положить в рот.
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
04.01.2011, 21:56     Подмена переменных для ссылок #12
цитата из страуструпа:
Ссылку можно интерпретировать, как автоматически разыменовываемый постоянный указатель или альтернативное имя объекта. Указатели и ссылки отличаются следующими особенностями:
1) Присвоение чего-либо указателю изменяет значение указателя , а не объекта на который он установлен.
2) Для того, чтобы получить указатель , как правило, необходимо использовать операторы new или &
3) Для доступа к объекту на который установлен указатель, используются операторы *, []
4) Присвоение ссылке нвоого значения изменяет то, на что она ссылается, а не саму ссылку
5) После инициализации ссылку невозможно установить на другой объект.
6) Присвоение ссылок основано на глубоком копировании (новое значение присваивается объекту, на который указывает ссылка); присвоение указателей не использует глубокое копирование(новое значение присваивается указателю, а не объекту)
7) Нулевые указатели представляют опасность
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 21:59     Подмена переменных для ссылок #13
vx5, вроде в новом стандарте будут переназначаемые ссылки, только вот немного не понятно, какой в них смысл...
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 22:29  [ТС]     Подмена переменных для ссылок #14
Спасибо всем. Похоже вопрос просто на проверку знаний. Я должен был сразу ответить что нельзя, а подумал, что с памятью как-то подшаманить можно.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 22:48     Подмена переменных для ссылок #15
ViviSex&I, дело в том, что ссылка - это не переменная, под неё даже памяти не выделяется, поэтому с этой самой памятью никак и не удастся "подшаманить". Это просто второе имя объекта, компилятор знает, что объект может называться так (имя самого объекта), а может так (имя ссылки). Именно поэтому ссылку нужно инициализировать при объявлении, потому что она сама никуда не сохраняется и нельзя потом вернуться к объявленной ранее ссылки и инициализировать её, поскольку "потом вернуться" - это, по сути, обратиться к памяти, по которой она находится, а памяти под неё, как я уже сказал, не выделяется.
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 22:59  [ТС]     Подмена переменных для ссылок #16
Я имел ввиду, что можно сдвинуть саму переменную в памяти, а на ее место поставить другую, и тогда ссылка будет указывать на другую переменную.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.01.2011, 23:10     Подмена переменных для ссылок #17
Да нет, так тоже нельзя
C++
1
2
3
4
5
6
7
#include <stdio.h>
int main () {
 int m;
 printf ("%x\n", &m);
 getchar ();
 return 0;
}
Так, а теперь пытаемся запихать переменную m в другую ячейку памяти. НЕ получается. Да и незачем оно по большому счёту.Сам понимаешь- какой смысл переменные туда-сюда гонять?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 23:18     Подмена переменных для ссылок #18
Есть такое понятие как
rvalue references
но думать подходит или нет мне сейчас недосуг.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 23:22     Подмена переменных для ссылок #19
ForEveR, я как раз об этом в 15 посте говорил, лень было пруф искать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2011, 23:22     Подмена переменных для ссылок
Еще ссылки по теме:

Диапазон значений для переменных C++
Тип переменных для LPCTSTR? C++
C++ Функция для записи переменных

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ViviSex&I
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 23:22  [ТС]     Подмена переменных для ссылок #20
Цитата Сообщение от kravam Посмотреть сообщение
какой смысл переменные туда-сюда гонять?
Единственный способ, как мне казалось, сделать это
Yandex
Объявления
04.01.2011, 23:22     Подмена переменных для ссылок
Ответ Создать тему
Опции темы

Текущее время: 03:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru