Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 200

Указатели и ссылки

24.11.2019, 09:37. Показов 4467. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам

а если написать return this тогда что вернется? и как определить?
 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Перепечатайте!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2019, 09:37
Ответы с готовыми решениями:

Указатели и ссылки [С++]
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....

Ссылки и указатели
#include <iostream> using namespace std; int main() { int *n=new int{1,2}; cout<<&n<<' '<<&n<<' '<<&n<<endl; return...

Указатели и ссылки
Собственно, не могу до конца осознать как это работает, вот пример из вики(комменты входят в пример) int n = 6; // Объявление...

75
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 11:44
Студворк — интернет-сервис помощи студентам
hoggy, да нормас. Человек языки путает. )
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 11:48
Цитата Сообщение от Mightsoul Посмотреть сообщение
я рассуждаю с точки зрения языка ассемблера, в c++ по-прежнему есть разыменование и всё остальное. Указатели и ссылки - это одно и тоже
с точки зрения молекулярной химии, любое вещество - суть кучка молекул.
из этого никак не следует, что железо и фольфрам - одно и тоже.

в этой программе присутствует два объекта:
C++
1
2
3
4
5
int main()
{
    int a;
    int*p = &a;
}
указатель обладает идетичностью.
это - полноценный объект, который занимает память.

а в этой - только 1 объект:
C++
1
2
3
4
5
int main()
{
    int a;
    int& r = a;
}
ссылка - псевдоним объекта.
у ссылки нет собственных объектов.
она не знанимает память.
у неё нет адреса.

это просто другое, альтернативное имя оригинального объекта.
любые операции над ссылкой - это операции с оригинальным объектом.

подумай об этом, когда в следующий раз будешь рассуждать с точки зрения ассемблера.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 11:54
специально для таких, как ты, я указал: упрощу, чтобы человек смог понять. Приведи пример, когда ссылка не хранит адрес объекта.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
указатель обладает идетичностью.
это очевидно.
Цитата Сообщение от hoggy Посмотреть сообщение
она не знанимает память.
у неё нет адреса.
но если это действительно так, то почему мой компилятор делает иначе?

Добавлено через 2 минуты
Croessmah, в каком месте?
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 11:58
Цитата Сообщение от Mightsoul Посмотреть сообщение
специально для таких, как ты, я указал: упрощу, чтобы человек смог понять.
упрощать материал - это хорошо.
но только не в том случае, когда упрощение искажает факты.

на самом деле моё сообщение хоть и адресованно тебе,
но оно не для тебя.

а для тех, кто будет читать твои бредни.
дабы не вводил ты людей в заблуждение.

Цитата Сообщение от Mightsoul Посмотреть сообщение
Приведи пример, когда ссылка не хранит адрес объекта.
я уже его приводил в #22

Цитата Сообщение от Mightsoul Посмотреть сообщение
но если это действительно там, то почему мой компилятор делает иначе?
остановок "тута" и "здеся" не существует.

существуют только конкретные компиляторы, и конкретный код.

попробуй взять свой конкретный компилятор,
и продемонстрировать конкретный код,
который напишет в консольку адрес ссылки.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:02
Цитата Сообщение от hoggy Посмотреть сообщение
любые операции над ссылкой - это операции с оригинальным объектом.
когда я говорил про "получить адрес ссылки", я имел ввиду получить адрес объекта, с которым эта ссылка связана.

Добавлено через 4 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
который напишет в консольку адрес ссылки.
ты только никуда не уходи, ладно?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 12:05
Mightsoul, везде. Вы пытаетесь объяснить семантику c++ ассемлерными понятиями.
Это так не работает. C++ - это язык высокого уровня.
В рамках неизменности наблюдаемого поведения, компилятор может вытворять что угодно.
Ссылка и указатель в C++ также имеют разные семантические свойства,
поэтому одно через другое объяснять тоже не очень корректно.
Вы же поведене ассемблерной программы не объясняете через электроны и дырки.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:07
прошу.

C++
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main (int argc, char *argv[], char *envp[]) {
    int data = 10, &reference = data, *pointer;
    asm("mov -8(%%rbp),%0" : "=r"(pointer));
    printf("%d",*pointer);
    return 0;
}
Добавлено через 36 секунд
что вы там говорили про то, что невозможно получить адрес ссылки?

Добавлено через 1 минуту
секунду.

Добавлено через 6 секунд
это не то.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 12:09
Mightsoul, давай возьмем другой компилятор и твой код развалится.
https://rextester.com/MQFIV63514

Ни работает. Пичаль.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:10
C++
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main (int argc, char *argv[], char *envp[]) {
    int data = 10, &reference = data, *pointer;
    asm("lea -8(%%rbp),%0" : "=r"(pointer));
    printf("%d\n%d",*pointer);
    return 0;
}
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 12:10
Mightsoul, еще раз. Не пытайтесь объяснить семантику c++ через ассемблеры. Всё равно ничего не получится.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:11
работает. "Пичаль".

Добавлено через 48 секунд
какие же вы смешные.
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 12:13
Mightsoul, ты вывел не адрес ссылки. Пичаль.
Не говоря уже о том, что это не C++.
Давай ты c++ немного подучишь, потом вернешься через годок.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 12:14
Цитата Сообщение от Mightsoul Посмотреть сообщение
когда я говорил про "получить адрес ссылки", я имел ввиду получить адрес объекта, с которым эта ссылка связана.
казалось бы, и причем тут указатели?
ты писал, "...как и указатель..."
смешались в кучу кони, люди..

кстати.

когда я говорю про фломастер, то имею ввиду именно фломастер.
когда я говорю про карандаш, то имею ввиду именно карандаш.
когда я говорю про ручку, то имею ввиду именно ручку.

когда я говорю про получение адреса указателя, то имею ввиду именно получение адреса именно указателя.

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

рекомендую.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:21
потому что нужен указатель 2-го порядка:

C++
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main (int argc, char *argv[], char *envp[]) {
    int data = 10, &reference = data, **pointer;
    asm("lea -8(%%rbp),%0" : "=r"(pointer));
    printf("%d",pointer);
    return 0;
}
Добавлено через 18 секунд
тебе того же советую.

Добавлено через 9 секунд
"Пичаль".
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 12:21
Цитата Сообщение от Mightsoul Посмотреть сообщение
int data = 10, &reference = data, *pointer;
    asm("lea -8(%%rbp),%0" : "=r"(pointer));
    printf("%d\n%d",*pointer);
зачем ты сюда указатель то приплел вообще?

для чистоты эксперимента не должно быть никаких не относящихся к делу объектов.

у тебя есть сссылка:
C++
1
2
3
4
5
int main()
{
    int a;
    int& r = a;
}
ты должен вывести в консоль адрес ссылки.

не адрес объекта по имени a
адрес ссылки по имени r

ты не сможешь этого сделать несмотря ни на какие хаки с ассемблером.

просто потому, что компилятор тупо не выделит под ссылку память.
нельзя получить адрес того, чего не существует.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:23
синтаксически - одно и тоже.

Добавлено через 52 секунды
а я что сделал?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 12:23
Цитата Сообщение от Mightsoul Посмотреть сообщение
потому что нужен указатель 2-го порядка:
ты уверждал, что ссылка как и указатель.
что это одно и тоже на уровне ассма.

а теперь начинаешь загонять про какие то неведомые указатели 2-го порядка.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:36
без указателей? хорошо.

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdint.h>
 
int main (int argc, char *argv[], char *envp[]) {
    uint32_t data = 10, &reference = data;
    uint64_t pointer;
    asm("lea -8(%%rbp),%0" : "=r"(pointer));
    printf("%d",(reinterpret_cast <uint64_t**> (pointer)));
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
ты уверждал, что ссылка как и указатель.
в языке ассемблера - да.

Добавлено через 1 минуту
уж извини, но прямого доступа к ссылкам нет, они сокрыты.

Добавлено через 1 минуту
просто потому, что компилятор тупо не выделит под ссылку память.
тебе так нравится склонять всё в абсолют, тебя это успокаивает, да?

Добавлено через 2 минуты
просто не можешь признать, что можно получить адрес ссылки? не важно, как именно осуществляется доступ к ссылке, факт в том, что я могу переопределить её значение.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 12:38
Цитата Сообщение от Mightsoul Посмотреть сообщение
синтаксически - одно и тоже.
Добавлено через 52 секунды
а я что сделал?
не знаю, что ты сделал.

ты когда пишешь ответ, цитируй на что отвечаешь.
мне вот вообще не очевидно к чему ты это написал.
что именно у тебя там синтаксически одно и тоже?

ладно. давай так.

вот псевдокод:

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    int v;
    int& r = v;
    std::cout << "v: address = " << &v << '\n';
    std::cout << "r: address = " << ??? << '\n';
}
будем считать, что эксперимент удался,
если ты действительно сможешь вывести в консоль адрес ссылки
этот адрес должен быть адресом именно ссылки,
а не адресом оригинального объекта.

если ссылка действительно как указатель,
как ты уверждаешь, значит модифицировав память ссылки,
ты сможешь её перенацелить на другой объект так же,
как можно перенацелить указатель.

результат должен быть стабильным.
то есть, воспроизводимым на различных компиляторах.
и не зависеть от настроек оптимизации.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 12:39
легко.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2019, 12:39

Указатели и ссылки
Добрый день, есть вопросы по поводу указателей и ссылок в параметрах функций. Правильно ли я понимаю, что есть по сути 2 варианта, либо...

Ссылки и указатели
Добрый день, не могу понять чем помогают при использовании указатели и ссылки? Есть код на c++ #progma once class well { ...

Указатели и ссылки
Экспериментируя с указателями пришел к вот таким выводам: int a; //переменная int *b; //указатель int &amp;c = a //ссылка на...

Ссылки и указатели
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы...

Указатели и Ссылки
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { if(inLeft == inRight) return *inLeft; ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru