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

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

24.11.2019, 09:37. Показов 4448. Ответов 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
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 14:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TRam_ Посмотреть сообщение
Но ничто не запрещает с помощью оператора получения адреса получить из ссылки адрес переменной.
ну и нафига ты мне это написал?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 14:24
Цитата Сообщение от Mightsoul Посмотреть сообщение
Никогда бы не додумался до подобных извратов с переопределением значения ссылки без этой дискуссии.
Это можно было сделось без asm-вставок. Например:
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 data1 = 10, data2 = 20, &reference = data1, **pointer;
    pointer = (uint32_t**)((char*)&pointer + 16);
    //asm("lea -16(%%rbp),%0" : "=r"(pointer));
    *pointer = &data2;
    printf("%d", reference);
}
https://wandbox.org/permlink/qLHN73alzopfS0kb

Всё это неопределенное поведение и обсуждению не подлежит.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 14:28
Цитата Сообщение от Mightsoul Посмотреть сообщение
ты хоть понимаешь, что я уже дважды скомпилировал и запустил, и о чудо! у меня ничего не упало.
это в деццком садике так говорят: "а у меня работает".

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

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
из-за которого софт покрашался на машине пользователя.
Это юзвер виноват. Пусть железяку меняет. )))

0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 14:38
Croessmah, очевидно, конечно, но я, не спавший около 28-и часов об этом не подумал.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.11.2019, 14:43
Цитата Сообщение от Mightsoul Посмотреть сообщение
не спавший около 28-и часов
В OllyDbg потерялся? Бывает.
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
24.11.2019, 14:50
во-первых, я не терялся, во-вторых, у меня другие отладчики.

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

Не по теме:

мне очень понравилось спорить с вами.

0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
24.11.2019, 15:55
Цитата Сообщение от hoggy Посмотреть сообщение
ну и нафига ты мне это написал?
Ну например мне потребовался указатель на поле переменной, на которое ранее была создана ссылка. Мне можно использовать "взятие адреса" (без UB) для такой ссылки, или надо переписывать всё полное имя этого поля для исходной переменной?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2019, 16:10
Цитата Сообщение от TRam_ Посмотреть сообщение
например мне потребовался указатель на поле переменной
не путай "указатель на поле", сиречь, указатель на данные-члены.
и просто указатель на данные.

это - принципиально различный вещи.

указатель на данные-члены имеет вид:
C++
1
type class_t::*
https://rextester.com/LNINE6906

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
struct some
{
    int a = 10;
    int b = 20;
};
 
int main()
{
    some obj;
    std::cout << "a = " << obj.a << '\n';
    std::cout << "b = " << obj.b << '\n';
    std::cout << '\n';
    
    int some::*member = &some::a;
    (obj.*member) = 55;
    
    std::cout << "a = " << obj.a << '\n';
    std::cout << "b = " << obj.b << '\n';
    std::cout << '\n';
 
    member = &some::b;
    (obj.*member) = 77;
    
    std::cout << "a = " << obj.a << '\n';
    std::cout << "b = " << obj.b << '\n';
    std::cout << '\n';
}
под капотом там у него что-то вроде "смещение относительно this объекта"

Цитата Сообщение от TRam_ Посмотреть сообщение
Мне можно использовать "взятие адреса" (без UB) для такой ссылки
можно.

с ссылкой можно делать всё тоже самое,
что можно делать с оригинальным объектом.

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

ссылка - просто другое имя одно и того же объекта.
1
 Аватар для stzer
140 / 110 / 60
Регистрация: 26.10.2013
Сообщений: 314
04.12.2019, 14:06
Цитата Сообщение от hoggy Посмотреть сообщение
есть ситуативные кейсы,
когда компилятор действительно протаскивает ссылки посредством указателей.
например в хэдере торчит:
реализация в уже готовеньком lib
компилятор никак не сможет залезть в реализацию,
и выполнить подстановку оригинального объекта вместо ссылки
поэтому в аргументах ссылки проталкиваются как указатели.
но даже в таких исключительных кейсах,
не получится гарантированно успешно получать доступ к памяти,
и перенацеливать ссылки.
Вопросов в голове стало больше, чем ответов.
Сейчас говорим про отдельную прогу, без всяких линкуемых либ.
То есть, если есть подобный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct composite_t // non pod
{
    /*
    ...
    */
};
 
void handle(const composite_t &c)
{
    /*
    ...
    */
}
То объект в handle передается как?
Напрямую со стека?
Передается участок памяти?
Но без указателя?

В какой литературе подробно освещается данный момент?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.12.2019, 14:37
Цитата Сообщение от stzer Посмотреть сообщение
То объект в handle передается как?
если вкратце: unspecified behavior

Цитата Сообщение от stzer Посмотреть сообщение
В какой литературе подробно освещается данный момент?
любители русского языка гуглят: Зуев Е.А., Чупринов А.А. (перевод) Стандарт С++

если не брезгуешь английским:
http://www.open-std.org/jtc1/s... /n4659.pdf

удобная навигация по собранию различного творчества:
https://stackoverflow.com/ques... -documents
2
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
04.12.2019, 15:15
Цитата Сообщение от hoggy Посмотреть сообщение
для new placement в стандарте есть особые пункты.
которые гласят: если класс содержит ссылочные (&) или неизменяемые (const) поля,
то применение new placement в отношении объектов таких классов - есть UB.
Не UB начиная с C++17.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.12.2019, 16:32
Цитата Сообщение от rat0r Посмотреть сообщение
Не UB начиная с C++17.
это касается только union,
или начиная с с++17 стандарт офф. разрешил модифицировать любые константы?
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
04.12.2019, 16:41
Цитата Сообщение от hoggy Посмотреть сообщение
это касается только union,
или начиная с с++17 стандарт офф. разрешил модифицировать любые константы?
Касается не только union и любые не разрешал.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
04.12.2019, 19:32
Цитата Сообщение от stzer Посмотреть сообщение
То объект в handle передается как?
Напрямую со стека?
Передается участок памяти?
Но без указателя?
У вас вопрос в контексте реализации или в контексте языка?
Если речь про язык, то он не оперирует такими понятиями как "стек" (несколько раз встречающийся термин "раскрутка стека" не в счет).
Если речь о реализации, то можно посмотреть сюда: https://itanium-cxx-abi.github... ormal-call

Добавлено через 13 минут
Цитата Сообщение от stzer Посмотреть сообщение
То объект в handle передается как?
Если это функция с внешним связыванием, то ссылка будет передаваться согласно ABI данной платформы. Для вышеприведенной реализации - это будет указатель. Если функция с внутренним связыванием, то могут быть варианты. Например настоящего вызова может и не быть, вместо этого будет jump. Соответственно не будет никакой передачи через стек\регистры параметров, а значит не нужен будет и указатель на объект для обращения к нему. Вполне можно будет вместо ссылки подставить обращение непосредственно к памяти объекта везде, где это нужно, без лишней косвенности.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2019, 19:32

Указатели и ссылки
Добрый день, есть вопросы по поводу указателей и ссылок в параметрах функций. Правильно ли я понимаю, что есть по сути 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; ...


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

Или воспользуйтесь поиском по форуму:
76
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru