Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/55: Рейтинг темы: голосов - 55, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77

Указатели и ссылки: в чем разница

08.07.2017, 18:55. Показов 11850. Ответов 85
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, объясните, пожалуйста, в чем разница между "ссылается" и "указывает"?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2017, 18:55
Ответы с готовыми решениями:

Ссылки vs указатели - в чем разница?
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и...

Указатели и ссылки: в чём их разница и сходство?
Я начал учить с++ и не могу кое в чём разобраться. Кто знает ответы на эти вопросы может ответить или скинуть какую нибудь ссылку где это...

в чем разница? массивы и указатели строк
В примере Дейтла ( в документе ) массивы строк инициализируются через указатели, при этом компилятор выдает ошибки. Я же инициализоравал...

85
 Аватар для AmbA
495 / 24 / 6
Регистрация: 09.06.2017
Сообщений: 322
Записей в блоге: 19
09.07.2017, 09:57
Ссылка - второе (новое, дополнительное) имя переменной. С помощью ссылки можно делать с переменной всё то же самое, что и с самой переменной. Ссылка - это и есть переменная, но под другим именем.
int x;
int & y = x; // y и x - одно и то же, у них один адрес и одно значение, изменяя y, мы изменяем x
y = x // всегда

Указатель - указывает на адрес в памяти, по которому расположена переменная. Если его *разыменовать, он тоже становится ссылкой.
int x;
int * y = &x; // y - адрес переменной x
*y = x // всегда
1
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
09.07.2017, 10:19
Цитата Сообщение от FishZone Посмотреть сообщение
Здравствуйте, объясните, пожалуйста, в чем разница между "ссылается" и "указывает"?
Абсолютно никакой. Разве что, "указывает" применимо только к указателям, но я не уверен, что так правильно вообще выражаться.
Принято говорить, что указатель ptr ссылается на переменную var.

( ИМХО )
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 11:55
Цитата Сообщение от FishZone Посмотреть сообщение
Здравствуйте, объясните, пожалуйста, в чем разница между "ссылается" и "указывает"?
Когда "ссылается" - пишем "value.method(1,2,3,4)". Когда "указывает" - "value->method(1,2,3,4)". Под капотом же все ровно тоже самое.
Цитата Сообщение от AmbA Посмотреть сообщение
Ссылка - второе (новое, дополнительное) имя переменной. С помощью ссылки можно делать с переменной всё то же самое, что и с самой переменной. Ссылка - это и есть переменная, но под другим именем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
struct Test
{
    int&x=y;//ежели ссылка "и есть переменная", память она кушать не должна?
    int y;
};
 
int main()
{
    //а ведь жрет, зараза, структура получается тяжелее простого int
    std::cout<<sizeof(int)<<" "<<sizeof(Test)<<std::endl;
    return 0;
}
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
09.07.2017, 12:08
Ещё важно понимать что ссылка и указатель это не совсем одно и то же.
Например для ссылок нет адресной арифметики, а у указателей есть.
С помощью ссылок так же можно безопасно ссылаться на временные объекты (константные ссылки, либо rvalue ссылки, если требуется модифицировать временный объект).
Так же ссылки требуют того, что бы определение было сразу при объявлении, а указатели этого не требуют.
Может под капотом эти ссылки и реализованы как указатель, но с точки зрения компилятора в коде программиста это не одно и то же...

А ещё есть такое понятие как ссылка на указатель)))
3
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
09.07.2017, 14:49
Renji,
Цитата Сообщение от Renji Посмотреть сообщение
Когда "ссылается" - пишем "value.method(1,2,3,4)". Когда "указывает" - "value->method(1,2,3,4)".
А если я пишу (*value).method( 1, 2, 3, 4 ) ?

На самом деле странная у Вас формулировка) Вот эта часть мне не очень понятна:
Цитата Сообщение от Renji Посмотреть сообщение
Когда "ссылается" - пишем "value.method(1,2,3,4)".
Кто тут ссылается и на кого?)
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 14:51
Цитата Сообщение от Captain Maxee Посмотреть сообщение
А если я пишу (*value).method( 1, 2, 3, 4 ) ?
Ну так при разыменовании указателя (Value*), мы ссылку (Value&) и получаем. Что не так?
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Кто тут ссылается и на кого?)
value ссылается на некий объект.
1
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
09.07.2017, 15:00
Цитата Сообщение от Renji Посмотреть сообщение
value ссылается на некий объект.
value и есть объект, в данном случае ( value.method( 1, 2, 3, 4 ) )
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 15:03
Цитата Сообщение от Captain Maxee Посмотреть сообщение
value и есть объект, в данном случае)
Ну разговор то у нас именно про ссылки. Которые совсем не тоже самое что объекты.
C++
1
2
Value valueA,valueB;//вот это объекты
Value&valueC=condition?valueA:valueB;//а это - именно ссылка, а не объект
0
09.07.2017, 15:04

Не по теме:

Renji, я неправильно Вас понял, извиняюсь. Перелили с пустого в порожнее.

0
6 / 6 / 3
Регистрация: 29.12.2016
Сообщений: 132
09.07.2017, 16:52
В отличии от ссылок, переменная указателя может в процессе программы может ссылаться на разные объекты, то есть менять область памяти своего указания.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 17:49
Цитата Сообщение от mskoromets Посмотреть сообщение
В отличии от ссылок, переменная указателя может в процессе программы может ссылаться на разные объекты, то есть менять область памяти своего указания.
C++
1
2
3
int a=1,b=2;
int*const c=&a;
c=&b;//опс... не меняется
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.07.2017, 18:07
Renji, он всё правильно сказал, может меняться. А то, что она может и не меняться, это и так очевидно, будь он const или нет.
0
Заблокирован
09.07.2017, 19:21
Цитата Сообщение от Undisputed Посмотреть сообщение
Ещё важно понимать что ссылка и указатель это не совсем одно и то же.
А вернее совсем не одно и то же.
Начать можно с того, что указатель является объектом, а ссылка — нет. И этим они различаются фундаментально.

Цитата Сообщение от Renji Посмотреть сообщение
//ежели ссылка "и есть переменная", память она кушать не должна?
//а ведь жрет, зараза, структура получается тяжелее простого int
Так не интересно. Покажи, чему равен sizeof самой ссылки, а не структуры с ней.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 19:37
Цитата Сообщение от daun-autist Посмотреть сообщение
Начать можно с того, что указатель является объектом, а ссылка — нет. И этим они различаются фундаментально.
Ссылка занимает определенный объем памяти. Никакой другой объект не может занимать этот объем одновременно с ней. В этом смысле она объект. Ну а что касается того что компилятор не дает непосредственно пронаблюдать этот объем через sizeof или оператор взятия адреса:

" -- Вы не существуете, -- сказал О'Брайен.
Снова на него навалилась беспомощность. Он знал, мог представить себе, какими аргументами будут доказывать, что он не существует, но все они -- бессмыслица, просто игра слов. Разве в утверждении: "Вы не существуете" -- не содержится логическая нелепость? Но что толку говорить об этом? Ум его съежился при мысли о неопровержимых, безумных аргументах, которыми его разгромит О'Брайен.
-- По-моему, я существую, -- устало сказал он. -- Я сознаю себя. Я родился и я умру. У меня есть руки и ноги. Я занимаю определенный объем в пространстве. Никакое твердое тело не может занимать этот объем одновременно со мной. В этом смысле существует Старший Брат? "
(c) 1984.
0
Заблокирован
09.07.2017, 19:42
Цитата Сообщение от Renji Посмотреть сообщение
Ссылка занимает определенный объем памяти.
Цитату из стандарта можно?
Цитата Сообщение от Renji Посмотреть сообщение
В этом смысле она объект.
Смысл понятия "объект" указан, например, здесь http://en.cppreference.com/w/cpp/language/object
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.07.2017, 20:01
Renji, в стандарте сказано, что выделять память под саму ссылку или нет определяется реализацией.
Если относится к ссылке как к указателю, то вскоре получим бяку где-нибудь в шаблоне.
Указатели и ссылки являются абсолютно разными сущностями языка.
3
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.07.2017, 20:11
Цитата Сообщение от Croessmah Посмотреть сообщение
Renji, в стандарте сказано, что выделять память под саму ссылку или нет определяется реализацией.
Компилятор может и под указатель ничего не выделять, потому что "the as-if rule". Конкретно с полями структуры фокус может и не сработать, но с переменными - запросто.
Цитата Сообщение от daun-autist Посмотреть сообщение
Цитату из стандарта можно?
Если ссылка может находиться более чем в одном состоянии (а она может), потреблять память ее обязывает стандарт "математика". Возможность оптимизаций позволяющих отбросить и ссылку, и вообще весь код это уже другой разговор.
Цитата Сообщение от daun-autist Посмотреть сообщение
Смысл понятия "объект" указан, например, здесь http://en.cppreference.com/w/cpp/language/object
Указанные там размер/выравнивание/имя ссылка вполне имеет. То что их нельзя наблюдать непосредственно через sizeof это уже другой разговор.
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
09.07.2017, 20:21
Цитата Сообщение от Renji Посмотреть сообщение
Ссылка занимает определенный объем памяти. Никакой другой объект не может занимать этот объем одновременно с ней. В этом смысле она объект.
References are not objects; they do not necessarily occupy storage
http://en.cppreference.com/w/c... /reference
0
Заблокирован
09.07.2017, 20:28
oldnewyear, бесполезно, у него, похоже ГСМ (гуманитарный склад мышления).
Либо это троллинг.

Добавлено через 3 минуты
Цитата Сообщение от Renji Посмотреть сообщение
Указанные там размер/выравнивание/имя ссылка вполне имеет.
Так покажи нам их!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2017, 20:28
Помогаю со студенческими работами здесь

Ссылки и указатели - в чем преимущество одного над другим
Известно, что главной причиной появления ссылок в С++ было дать более безопасную альтернативу указателям в некоторых ситуациях. Ссылка в...

Указатели и ссылки c++
Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru