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

Как понять тему ссылки и указатели

05.08.2026, 20:53. Показов 10566. Ответов 135
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я не понимаю эту тему я постоянно путаюсь дайте какойто видеоурок самый понятный или сами объясните я не понимаю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2026, 20:53
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Code:: Blocks (не на тему программирования, а на тему настройки)
доброе время суток сразу попрошу прощения за созданную тему в этом разделе, которая не совсем по...

Указатели на указатели, как правильно разыменовать, где ошибка?
1)Есть класс: Shape - абстрактный; у него есть классы наследники: Circle, Triangle. 2)Eсть...

135
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
07.08.2026, 12:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alexu_007 Посмотреть сообщение
Сами же говорили, что под ссылку выделяется память
процитируй, где я такое говорил?

И есть такие вещи как "семантика" и "техническая реализация"

мы сейчас говорим про семантику

Добавлено через 57 секунд
Цитата Сообщение от alexu_007 Посмотреть сообщение
Второе имя это #define
нет, это - макроопределение

И о нём компилятор не знает, до него макросы не добегают

Добавлено через 1 минуту
Цитата Сообщение от vlisp Посмотреть сообщение
сказал а, скажи и б
зачем такой примитивный пример Более показательно так:

C++
1
&B; // взятие адреса у объекта A
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
07.08.2026, 12:46
Цитата Сообщение от Алексей1153 Посмотреть сообщение
процитируй, где я такое говорил?
Ну другие говорили:

int i=5;
...то программа просит у ОС 2 ячейки памяти.
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
07.08.2026, 12:47
alexu_007, того товарища читать не советую, он наговорит
0
07.08.2026, 18:36
 Комментарий модератора 
vlisp, просьба прекратить высказывания не по теме и перехода на личности, в противном случае к Вашей персоне будут применены дисциплинарные темы. Тема почищена.
0
231 / 172 / 71
Регистрация: 14.06.2024
Сообщений: 472
08.08.2026, 09:02
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void func(int& a)
{
    *(&a) = 5;
    cout << hex << &a << " " << a << endl;
}
int main()
{
    int a = 3;
    cout << hex << &a << " " << a << endl;
    func(a);
    cout << hex << &a << " " << a << endl;
    
    system("pause");
    return 0;
}
то что адреса одинаковые, это компилятор подтасовками занимается?
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
08.08.2026, 09:16
udmurt2024, в данном случае они и должны быть одинаковыми, объект один и тот же
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
08.08.2026, 23:31
Цитата Сообщение от alexu_007 Посмотреть сообщение
Сами же говорили, что под ссылку выделяется память, какое же это "просто" второе имя?
Одно другому не мешает. С концептуальной точки зрения, вас не должно интересовать, выделяется память под ссылку или нет, ибо прямого доступа к этой памяти в будущем у вас все равно не будет. То есть вы никогда не узнаете, выделилась ли память или нет. В такой ситуации разглагольствовать о том, выделяется ли память под ссылку, нет никакого смысла.

На практике компилятор не будет выделять память под ссылку тогда, когда этого можно избежать. Но так как привязка ссылки к конкретному целевому объекту может зависеть от факторов времени выполнения, понятно, что компилятору иногда придется прибегать к реализации ссылок через "замаскированные указатели", т.е. выделять под них память. Параметры функций типа ссылка, поля классов типа ссылка - понятно, что на практике во многих случаях (в большинстве случаев?) они будут "замаскированными указателями".

Тем не менее ссылки в С++ не являются объектными типами, то есть концептуально они положения в памяти не имеют и памяти не занимают. А все остальное - побочные детали реализации.

---

Один из примеров, иллюстрирующий то, что ссылка является лишь еще одним именем для объекта, выглядит так:

В языке С++ не существует никакой семантической разницы между объявлением

C++
1
int a = 42;
и объявлением

C++
1
int &&a = 42;
В первом случае вы получаете привычную вам обычную переменную, а во втором - ссылку, привязанную к безымянному временному объекту. Но никакой разницы между этими вариантами с точки зрения языка С++ нет. Их дальнейшее поведение полностью идентично.

При этом второй вариант как раз иллюстрирует разделение сущностей на имя переменной (то есть ссылку) и память переменной (безымянный кусочек памяти). Вы всегда можете считать, что первый вариант - это лишь более компактная форма записи второго варианта, то есть всякий раз, когда вы объявляете обычную переменную, вы на самом деле объявляете ссылку (имя), привязанную к безымянному объекту (память).
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
09.08.2026, 06:52
bima8, ты пишешь, что "постоянно путаешься". Приведи пример такой путаницы.

Попробую рассказать очень кратко.

1) все данные и программы, с которыми мы работаем, располагаются в оперативной памяти компьютера.
2) память разбита на байты, каждый байт имеет свой номер (адрес), по которому к этому байту обращается процессор
3) для хранения больших чисел байты могут объединяться в группы по 2, 4, 8 ... байтов. Адресом группы процессор считает
номер (адрес) самого левого (первого) байта группы
4) в любом случае можно считать, что адрес - это просто целое число.

Это понятно? Возражений нет? Если есть - спрашивай.

Идём дальше.

В языках C/C++ есть операция & - взятие адреса и есть специальный код формата для печати адресов:

C
1
2
3
4
    int i;      // описали переменную
    i=666;   // присвоили ей значение
    
    printf("i=%d adr(i)=%p\n",i,&i);  // напечатали значение переменной и её адрес
Указатель - это переменная, которая хранит адрес другой переменной (ведь адрес - это просто целое число).
Описываются указатели так:

C
1
    int *a;  // a - указатель на переменную целого типа. тип такого указателя int *
В указатель мы можем загружать разные адреса:

C
1
2
3
4
5
6
7
    int i=3;
    int j=8;
 
    int *a;
 
    a=&i;   // а хранит адрес i
    a=&j;   // а хранит адрес j
Для того, чтобы получить доступ к памяти, на которую указывает указатель, служит операция *.
Она называется операцией разыменования (название, на мой взгляд, странное, но устоявшееся).


C
1
2
3
4
5
6
7
8
9
10
11
     int i=4,j=5;
 
     int *a;
 
     a=&i;
 
     printf("%d\n",*a);  // печать 4
 
     a=&j;
 
     printf("%d\n",*a);  // печать 5
Вопросы есть? Прошу!

PS

Пуристов прошу не беспокоиться и не придираться. Да, память, с которой работает программист в современных ОС - виртуальная. Да, в некоторых ОС (напр. в MS/DOS) адрес - это не просто целое число. Для начального вникания в суть
дела всё это не имеет значения и будет осмысленно позже.
2
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
09.08.2026, 19:08
Почему тип указателя int, а не специально для адреса придуманный? Что бы хоть не путаться, где просто целочисленная переменная, а где указатель?
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
09.08.2026, 19:19
alexu_007, если после типа стоит звёздочка, это указательный тип

TYPE* - такой указатель умеет указывать на объект типа TYPE
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
09.08.2026, 20:51
Цитата Сообщение от alexu_007 Посмотреть сообщение
Почему тип указателя int, а не специально для адреса придуманный? Что бы хоть не путаться, где просто целочисленная переменная, а где указатель?
??? Откуда вы такое взяли? А в объявлении char c[10] вам тоже видится, что тип c - char?

Тип идентификатора в объявлении int *a складывается из "общей части", относящейся ко всему объявлению (в данном случае int) и "индивидуальных кусочков", навешиваемых на каждый конкретный идентификатор (в данном случае - *). Так что тип указателя в данном примере int *, а не int.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
10.08.2026, 06:46
Цитата Сообщение от alexu_007 Посмотреть сообщение
Почему тип указателя int, а не специально для адреса придуманный?
- тип указателя - не int, а int*. Просто звезду отделяют пробелом. Если бы указатель был бы привязан к адресу конкретной переменной, то он был бы малополезен. Сила указателей в том, что, работая с одним указателем и просто меняя адрес, мы можем путешествовать по памяти:

C
1
2
3
4
     int x[5]={11,22,33,44,55};
     int *p;
     p=&x[0];
     for (int i=0; i<5; i++) printf("i=%d x[%d]=%d\n",i,i,*(p++));
1
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
10.08.2026, 14:00
По "памяти можно путешествовать" и с помощью индексов массива: x[0], x[1], x[2] и так далее. Так что указатель и тут "малополезен".
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
10.08.2026, 14:15
Цитата Сообщение от alexu_007 Посмотреть сообщение
о "памяти можно путешествовать" и с помощью индексов массива: x[0], x[1], x[2] и так далее. Так что указатель и тут "малополезен".
на стеке массив размещать - не комильфо
0
Эксперт .NET
 Аватар для Usaga
14811 / 9584 / 1368
Регистрация: 21.01.2016
Сообщений: 36,099
10.08.2026, 15:00
vlisp, почему?
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
10.08.2026, 16:35
Цитата Сообщение от Usaga Посмотреть сообщение
почему?
погугли
0
Эксперт .NET
 Аватар для Usaga
14811 / 9584 / 1368
Регистрация: 21.01.2016
Сообщений: 36,099
10.08.2026, 16:47
vlisp, т.е. ты сам не можешь объяснить в двух словах? Настолько глубокая тема?
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
10.08.2026, 17:16
vlisp, массив для этого и предназначен в C++
0
Эксперт .NET
 Аватар для Usaga
14811 / 9584 / 1368
Регистрация: 21.01.2016
Сообщений: 36,099
10.08.2026, 17:18
Алексей1153, в C# для этого тоже есть stackalloc. А тут оказывается "не комильфо". Век живи - век учись.
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
10.08.2026, 17:28
Usaga, std::pmr
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2026, 17:28

Указатели на функции. Указатели на функции как формальные параметры у функциях высшего уровня
Найти наименьшее значение для функций используя функции и указатели на функции ...

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

Программа на тему указатели, функции, строки. (язык Си)
Доброго времени суток. Как это случается со многими - я оттянула решение лабораторных работ до...

Задание на тему Указатели
требуется решить такую задачу на C++ : Имеются N-точек, соединенных отрезками. Составить...

Задачи на тему "указатели"
Нужны задачки для закрепления темы &quot;указатели&quot;. Проходил тему по Шилдту и частично по Девису....


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru