0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
1

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

04.01.2011, 14:50. Показов 3333. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, такое дело: преподаватель задала вопрос, на который я не смог ответить - как сделать так, что бы ссылка инициализированная на одну переменную указывала на другую?

Мои размышления:
Ссылка не может указывать на нул, по-этому поиграться с областью видимости, как это можно делать с указателями не получиться. Так же ссылка не дает инициализировать себя на указатель, хотя это немного не по условию, но результат был бы схож. Остается, как я понимаю, только работа с памятью. Поискал, но на вопрос ответа не нашел.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2011, 14:50
Ответы с готовыми решениями:

Использование ссылок и обычных имен переменных
Добрый вечер, у меня такой вопрос. Может быть он покажется довольно неинтересным вам, но мне просто...

подмена ссылок
Такая проблема: захожу в оперу, нахожу в гугле что нибуть, жму, но в новой вкладке открывается...

Подмена ссылок в браузере
Добрый день. Прошу помощи в сборах логов и устранении подмены ссылок в браузерах. В основной...

Подмена ссылок в браузерах
Добрый день! В браузерах начали подменяться ссылки при нажатии на них. Вместо ожидаемого лезет...

23
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
04.01.2011, 17:29 2
ссылка на ссылку
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
04.01.2011, 17:39 3
Вопрос такой:
В ячейке памяти записан адрес. Как записать туда другой адрес?
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 18:13  [ТС] 4
Цитата Сообщение от igorrr37 Посмотреть сообщение
ссылка на ссылку
А смысл? Имеется ввиду, что в любом месте программы она должна смочь указывать на другую переменную

Вопрос по теме: имя переменной тоже ссылка?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
04.01.2011, 19:47 6
Цитата Сообщение от ViviSex&I Посмотреть сообщение
В общем, такое дело: преподаватель задала вопрос, на который я не смог ответить - как сделать так, что бы ссылка инициализированная на одну переменную указывала на другую?
А воспроизведи вопрос дословно. При такой постановке вопроса ответ "никак". Ссылку для того и придумали, чтобы её можно было только один раз проинициализировать. Если ты (или преподаватель) не путаешь понятия "ссылка" и "указатель".

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

В первом случае положит в стек адрес переменной. Ссылку то бишь. А во втором значение 6.
0
191 / 175 / 12
Регистрация: 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
могу ошибаться, но помоему, в вашем примере в обоих случаях мы имеем дело с объектом. На определенном уровне абстракции это выглядит как передача объекта в случае ссылки и его копирование в случае передачи по значению. Если копать ниже, то адресс ячейки используется всегда и везде как минимум для считывания.
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 20:16  [ТС] 9
Цитата Сообщение от Evg Посмотреть сообщение
А воспроизведи вопрос дословно.
Увы не смогу. Смысл сохранил.
Цитата Сообщение от Evg Посмотреть сообщение
Если ты (или преподаватель) не путаешь понятия "ссылка" и "указатель".
Да, вроде, не должны ни я ни она. С указателем было бы все просто.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
04.01.2011, 20:37 10
Вообще ссылка в некотором контексте тоже может обозначать указатель. Например нет такого понятия "передача параметра в функцию по указателю", есть понятие "передача по ссылке". А вот какие средства используются для того, чтобы передать по ссылке, это уже чётко указывается, например "Передача параметра по ссылке с помощью указателя" или "Передача параметра по ссылке с помощью ссылки".
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
04.01.2011, 21:08 11
Цитата Сообщение от vx5 Посмотреть сообщение
Если копать ниже, то адресс ячейки используется всегда и везде как минимум для считывания.
Да, так. Но я бы не стал обращать на это внимание автора, дабы не запутать и ограничился тем уровнем углубления, которым ограничился. Я, кстати, делал в похожей теме скриншот отладчика и выкладывал его сюда и стек там показывал и что лежит на его верхушке. Щас мне этой темы, естессно, не найти.

А вот моя тема, может, пригодится.
Переменные ссылочного типа. Просьба разжевать и положить в рот.
2
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
04.01.2011, 21:56 12
цитата из страуструпа:
Ссылку можно интерпретировать, как автоматически разыменовываемый постоянный указатель или альтернативное имя объекта. Указатели и ссылки отличаются следующими особенностями:
1) Присвоение чего-либо указателю изменяет значение указателя , а не объекта на который он установлен.
2) Для того, чтобы получить указатель , как правило, необходимо использовать операторы new или &
3) Для доступа к объекту на который установлен указатель, используются операторы *, []
4) Присвоение ссылке нвоого значения изменяет то, на что она ссылается, а не саму ссылку
5) После инициализации ссылку невозможно установить на другой объект.
6) Присвоение ссылок основано на глубоком копировании (новое значение присваивается объекту, на который указывает ссылка); присвоение указателей не использует глубокое копирование(новое значение присваивается указателю, а не объекту)
7) Нулевые указатели представляют опасность
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
04.01.2011, 21:59 13
vx5, вроде в новом стандарте будут переназначаемые ссылки, только вот немного не понятно, какой в них смысл...
1
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 22:29  [ТС] 14
Спасибо всем. Похоже вопрос просто на проверку знаний. Я должен был сразу ответить что нельзя, а подумал, что с памятью как-то подшаманить можно.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
04.01.2011, 22:48 15
ViviSex&I, дело в том, что ссылка - это не переменная, под неё даже памяти не выделяется, поэтому с этой самой памятью никак и не удастся "подшаманить". Это просто второе имя объекта, компилятор знает, что объект может называться так (имя самого объекта), а может так (имя ссылки). Именно поэтому ссылку нужно инициализировать при объявлении, потому что она сама никуда не сохраняется и нельзя потом вернуться к объявленной ранее ссылки и инициализировать её, поскольку "потом вернуться" - это, по сути, обратиться к памяти, по которой она находится, а памяти под неё, как я уже сказал, не выделяется.
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 22:59  [ТС] 16
Я имел ввиду, что можно сдвинуть саму переменную в памяти, а на ее место поставить другую, и тогда ссылка будет указывать на другую переменную.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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 в другую ячейку памяти. НЕ получается. Да и незачем оно по большому счёту.Сам понимаешь- какой смысл переменные туда-сюда гонять?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.01.2011, 23:18 18
Есть такое понятие как
rvalue references
но думать подходит или нет мне сейчас недосуг.
2
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
04.01.2011, 23:22 19
ForEveR, я как раз об этом в 15 посте говорил, лень было пруф искать.
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 9
04.01.2011, 23:22  [ТС] 20
Цитата Сообщение от kravam Посмотреть сообщение
какой смысл переменные туда-сюда гонять?
Единственный способ, как мне казалось, сделать это
0
04.01.2011, 23:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2011, 23:22
Помогаю со студенческими работами здесь

Подмена ссылок в браузере
Привет ребят.Открываются левые сайты Заранее спасибо за внимание

Подмена ЧПУ ссылок на реальные
Здравствуйте написал простенький скрипт обработки ссылок ЧПУ. Ссылка имеет вид в строке если на...

Подмена ссылок и картинок в браузерах
Добрый день! Проблема в следующем: с какого-то момента во всех браузерах стали постоянно...

Конвертация данных. Подмена ссылок
Всем привет. Помогите пожалуйста допилить обмен. Задача такая. Обмен между УТ 10.3 и БП 2.0. В...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru