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

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

05.08.2026, 20:53. Показов 10871. Ответов 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
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
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,362
07.08.2026, 12:46
Цитата Сообщение от Алексей1153 Посмотреть сообщение
процитируй, где я такое говорил?
Ну другие говорили:

int i=5;
...то программа просит у ОС 2 ячейки памяти.
0
фрилансер
 Аватар для Алексей1153
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
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
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
08.08.2026, 09:16
udmurt2024, в данном случае они и должны быть одинаковыми, объект один и тот же
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13236 / 6868 / 1827
Регистрация: 18.10.2014
Сообщений: 17,413
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,774
Записей в блоге: 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,362
09.08.2026, 19:08
Почему тип указателя int, а не специально для адреса придуманный? Что бы хоть не путаться, где просто целочисленная переменная, а где указатель?
0
фрилансер
 Аватар для Алексей1153
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
09.08.2026, 19:19
alexu_007, если после типа стоит звёздочка, это указательный тип

TYPE* - такой указатель умеет указывать на объект типа TYPE
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13236 / 6868 / 1827
Регистрация: 18.10.2014
Сообщений: 17,413
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,774
Записей в блоге: 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,362
10.08.2026, 14:00
По "памяти можно путешествовать" и с помощью индексов массива: x[0], x[1], x[2] и так далее. Так что указатель и тут "малополезен".
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,449
10.08.2026, 14:15
Цитата Сообщение от alexu_007 Посмотреть сообщение
о "памяти можно путешествовать" и с помощью индексов массива: x[0], x[1], x[2] и так далее. Так что указатель и тут "малополезен".
на стеке массив размещать - не комильфо
0
Эксперт .NET
 Аватар для Usaga
14819 / 9598 / 1369
Регистрация: 21.01.2016
Сообщений: 36,146
10.08.2026, 15:00
vlisp, почему?
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,449
10.08.2026, 16:35
Цитата Сообщение от Usaga Посмотреть сообщение
почему?
погугли
0
Эксперт .NET
 Аватар для Usaga
14819 / 9598 / 1369
Регистрация: 21.01.2016
Сообщений: 36,146
10.08.2026, 16:47
vlisp, т.е. ты сам не можешь объяснить в двух словах? Настолько глубокая тема?
0
фрилансер
 Аватар для Алексей1153
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
10.08.2026, 17:16
vlisp, массив для этого и предназначен в C++
0
Эксперт .NET
 Аватар для Usaga
14819 / 9598 / 1369
Регистрация: 21.01.2016
Сообщений: 36,146
10.08.2026, 17:18
Алексей1153, в C# для этого тоже есть stackalloc. А тут оказывается "не комильфо". Век живи - век учись.
0
фрилансер
 Аватар для Алексей1153
6510 / 5772 / 1135
Регистрация: 11.10.2019
Сообщений: 15,418
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
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru