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

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

05.08.2026, 20:53. Показов 10554. Ответов 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
46 / 128 / 11
Регистрация: 24.04.2019
Сообщений: 941
10.08.2026, 19:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
почему?
Скорее всего vlisp считает, что таким образом не будет уязвимости переполнения стека. Если это так, то я уже не знаю что и думать об этом форуме.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
10.08.2026, 19:46
Цитата Сообщение от Дмитрий_1982 Посмотреть сообщение
Скорее всего vlisp считает, что таким образом не будет уязвимости переполнения стека.
А что именно имеется в виду под "уязвимостью переполнения стека" в данном случае?
0
46 / 128 / 11
Регистрация: 24.04.2019
Сообщений: 941
10.08.2026, 21:54
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А что именно имеется в виду под "уязвимостью переполнения стека"
Ну как что? Это когда в массив на стеке помещается больше данных, чем он может в себя вместить. В результате затирается либо адрес возврата из процедуры, либо какие-то данные программы.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
10.08.2026, 22:00
Цитата Сообщение от Дмитрий_1982 Посмотреть сообщение
Ну как что? Это когда в массив на стеке помещается больше данных, чем он может в себя вместить. В результате затирается либо адрес возврата из процедуры, либо какие-то данные программы.
Но это явление называется "уязвимостью переполнения буфера", а не "уязвимостью переполнения стека". "Переполнение стека" - это совсем другое.
0
46 / 128 / 11
Регистрация: 24.04.2019
Сообщений: 941
10.08.2026, 22:05
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
уязвимостью переполнения буфера
Точно. День был тяжелый, я устал и неверно выразился. Но сути это не меняет. Не размещать по этой причине массив на стеке - решение не совсем верное.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,375
11.08.2026, 01:12
Цитата Сообщение от vlisp Посмотреть сообщение
о "памяти можно путешествовать" и с помощью индексов массива: x[0], x[1], x[2] и так далее.
Я вот подумал, а для чего же указатель полезен?
Полезен что бы прочитать из выделенной памяти данные другого типа.
(Волшебное привидение типов.)
Пример из жизни?
Захват звука в windows летит массивом uint8_t. (BYTE *pData; вот так там ниже)
Но формат этой кухни 32 битный float.
И если ты хочешь поинтересоваться, а что там летит, то придёться читать от туда float...

Добавлено через 13 минут
Так упрощённо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BYTE *pData= new BYTE[3840];
 
 while (packetLength != 0)  {
         //============== Get the available data in the shared buffer.==============
            hr = pCaptureClient->GetBuffer(&pData, &numFramesAvailable,
                                   &flags, NULL, NULL);
                // Copy the available capture data to the audio sink.
 if(Form1->CheckBox3->Checked)zxCopyData(pData,numFramesAvailable);
         Form1->ZXchart23(pData,numFramesAvailable);// <==== Вызов на визуализацию
             //---------------------
       hr = pCaptureClient->ReleaseBuffer(numFramesAvailable);
 
       hr = pCaptureClient->GetNextPacketSize(&packetLength);
                        //------------------------
                                   }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void TForm1::ZXchart23(BYTE *zxData, UINT32 Nsize)
   {  float Left_Level=0.0, Right_Level=0.0;
//==================================
           //   Nsize/=8;            Вот в этой функции и всё волшебство..............................................
    float *half_ptr =(float*)zxData;
//-------------
 for(UINT32 z=0; z< Nsize; ++z){ //  <--- Nsize - количество кадров в присланном массиве
  Left_Level+= fabs(*half_ptr);
      ++half_ptr;
// ------------
  Right_Level+= fabs(*half_ptr);
   ++half_ptr;
  }
    //--------------------- среднее арифм. из пакета ( -- УМНОЖАЕМ НА ПОЗИЦИЮ ПРАВОГО ПОЛЗУНКА --)
 Right_Level=(Right_Level/Nsize) * (float)TrackBar1->Position;//Множитель звука изменить;
Left_Level=(Left_Level/Nsize) * (float)TrackBar1->Position;//Множитель звука изменить;
Давно писал, когда ещё на бильдере.
Вообщем с каждым прилётом BYTE *pData, склеиваются две переменные float, для определения уровней звука.
Авторегулятор звука. Вечно недоделанный. Но я пользуюсь.
Компилируеться бильдером "Rio" значит не совсем всё плохо...
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
11.08.2026, 08:17
alexu_007, да, для массивов, можно и с помощью индексов. Но есть и другие ситуации. К примеру, нужно передать в функцию некую структуру. В классическом С, конечно, можно написать вот так:

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
#include <stdio.h>
 
struct Pair {
    int first;
    int second;
};
 
void foo(struct Pair p)
{
    printf("f=%d s=%d\n",p.first,p.second);
}
 
int main()
{
    struct Pair p1,p2;
    
    p1.first=1;
    p1.second=-1;
    
    p2.first=111;
    p2.second=222;
 
    foo(p1);
    foo(p2);
 
    return 0;
}
Здесь в функцию передаются структурные данные. Но в C передача параметров осуществляется по значению. Это приводит к тому, функции foo доступны не переменные p1 и p2, созданные в главной функции, а их копии. Это означает, что функция не способна изменить значение переменной p1 в main.

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 <stdio.h>
 
struct Pair {
    int first;
    int second;
};
 
void foo(struct Pair p)
{
    p.first=777;
    p.second=888;
    printf("Внутри foo:\n");
    printf("f=%d s=%d\n",p.first,p.second);
}
 
int main()
{
    struct Pair p1;
    
    p1.first=1;
    p1.second=-1;
 
    foo(p1);
    
    printf("В main:\n");
    printf("f=%d s=%d\n",p1.first,p1.second);
 
    return 0;
}
Вывод:

Внутри foo:
f=777 s=888
В main:
f=1 s=-1

Кроме того, на копии тратится дополнительная память (в стеке). Отсюда следует что "крупный" объект так в функцию вообще не передашь (стек исчерпается).

Использование указателей решает проблему радикально:

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
30
31
32
#include <stdio.h>
 
struct Pair {
    int first;
    int second;
};
 
void foo(struct Pair *p)  // теперь передаётся адрес пары
{
    p->first=777;
    p->second=888;
    printf("Внутри foo:\n");
    printf("f=%d s=%d\n",p->first,p->second);
}
 
int main()
{
    struct Pair p1;
    
    p1.first=1;
    p1.second=-1;
    
    printf("В main:\n");
    printf("f=%d s=%d\n",p1.first,p1.second);
 
    foo(&p1);
    
    printf("В main:\n");
    printf("f=%d s=%d\n",p1.first,p1.second);
 
    return 0;
}
Вывод:

f=1 s=-1
Внутри foo:
f=777 s=888
В main:
f=777 s=888

Да, теперь в функцию передаётся указатель на пару и для обращения к полям пары нужно использовать операцию "->" вместо операции ".". Но теперь функция может изменить внешнюю пару и в стеке память расходуетется только передачу указателя.

Добавлено через 6 минут
Наталья8, что называется, "с языка сняли". Хотел и об этом тоже написать.
1
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,224
Записей в блоге: 2
11.08.2026, 19:30
Цитата Сообщение от alexu_007 Посмотреть сообщение
Так что указатель и тут "малополезен".
А по-моему указатели и адресная арифметика - это сильная сторона языка. А если Вам не нравится, то дверь открыта, есть много языков без этого, хотя бы жаба или шарп

Вопрос: как передать в ф-цию массив по значению? Понятно что легко обойти: сделать массив членом структуры и ее пихать по значению. Также понятно что передача массива по значению малополезна, а может и просто глупа. Но все-таки как, из любви к языку?
0
 Аватар для volodin661
7159 / 2347 / 354
Регистрация: 10.12.2013
Сообщений: 8,140
12.08.2026, 02:21
"Так что указатель и тут "малополезен"

Сиськи тоже малополезны, поскольку за молоком хожу в пятёрочку.
Но есть нюанс.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
12.08.2026, 07:55
Цитата Сообщение от Igor3D Посмотреть сообщение
А по-моему указатели и адресная арифметика - это сильная сторона языка.
Ни разу не возникло необходимости использовать указатели, а тем более адресную арифметику - за исключением их прямого назначения: передачи параметров в функции. Так что для меня сильная сторона языка оказалась, увы, невостребованной.
0
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 850
12.08.2026, 09:52
Цитата Сообщение от alexu_007 Посмотреть сообщение
Ни разу не возникло необходимости использовать указатели, а тем более адресную арифметику - за исключением их прямого назначения: передачи параметров в функции.
Кто вам сказал такую чушь (про "прямое назначение")?
А то что вы "никогда не использвали указатели", говорит лишь о том, что вы - начинающий. И не писали ничего сложнее "Hello world" или подобного.
Например: как именно использовать динамическую память в си без указателей?
Как организовывать структуры данных типа "связный список" и подобные?
Да элементарно даже в WinAPI везде используются указатели, и не только для "передачи параметров в функции". Не использовать их - значит не вызывать WinAPI.

Указатели придают языку мощь и гибкость, которой нет в той же Яве или Питоне. Позволяют эффективно и оптимально решать задачи. Не ограничиваясь детскими барьерами.
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
12.08.2026, 11:59
alexu_007, динамический полиморфизм. Без указателей не работает
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,224
Записей в блоге: 2
12.08.2026, 16:38
Цитата Сообщение от alexu_007 Посмотреть сообщение
Ни разу не возникло необходимости использовать указатели, а тем более адресную арифметику - за исключением их прямого назначения: передачи параметров в функции. Так что для меня сильная сторона языка оказалась, увы, невостребованной.
Ну значит Вы еще молодой и у Вас все спереди
Цитата Сообщение от jcxz Посмотреть сообщение
Как организовывать структуры данных типа "связный список" и подобные?
А интересный вопрос, как это делается в языках без указателей? Что там "под капотом"? Указатели со счетчиками ссылок? Или
А мне все равно как, главное что работает
Ну-ну
0
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 850
12.08.2026, 18:26
Цитата Сообщение от Igor3D Посмотреть сообщение
А интересный вопрос, как это делается в языках без указателей? Что там "под капотом"? Указатели со счетчиками ссылок?
Скорее всего. Какие-то неявные указатели.
0
фрилансер
 Аватар для Алексей1153
6508 / 5763 / 1135
Регистрация: 11.10.2019
Сообщений: 15,411
12.08.2026, 19:10
Цитата Сообщение от Igor3D Посмотреть сообщение
как это делается в языках без указателей? Что там "под капотом"? Указатели со счетчиками ссылок?
насколько я помню (где-то разбиралось), в питоне все объекты работают как плюсовый std::shared_ptr<const T> , только окончательно прибиваются сборщиком мусора, а не по выходу из скоупа

То есть - всё COW

Может, сейчас что-то упростили уже
0
 Аватар для Enifan
1854 / 1203 / 502
Регистрация: 14.10.2018
Сообщений: 3,356
12.08.2026, 19:52
Цитата Сообщение от Igor3D Посмотреть сообщение
как это делается в языках без указателей?
Указатели есть везде, это база для любого языка. Другое дело что во многих высокоуровневых языках это скрыто (то есть нельзя ими воспользоваться напрямую, но глубоко под капотом они там есть), и остались максимум ссылки (что по сути почти тот же указатель), и это упрощено сахаром.
А сами коллекции вроде как никто не пишет, все берут готовые (имхо их достаточно чтобы решить все задачи), в высокоуровневых языках никто не хочет писать очередной "умный список для быстродействия" ибо нет желания этим заниматься, там акцент на написание логики идет.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
12.08.2026, 20:18
Цитата Сообщение от jcxz Посмотреть сообщение
вы - начинающий. И не писали ничего сложнее "Hello world" или подобного
Ну, я написал:

- аудио проигрыватель для линукс (имеющиеся не понравились). Пользуюсь и в винде.

- программа, решающая судоку (любой сложности).

- программа, собирающая пятнашки (написал 50%, половину содрал с проекта в инете, который почти не работал).

- программа для поиска хороших коэффициентов для линейной конгруэнтной функции.

- программа берет файлы мр3 из моей муз. коллекции и в случайном порядке записывает их в папки по 100 шт - для скидывания на флешку и прослушивания в машине.

- морской бой 15х15 с "кривыми" кораблями - так мне показалось интереснее.

- мелочевку разную много, типо календарик, калькулятор, проверка чисел на простоту (до 64 бит), решето эрастофена (32 бита) и т.п.
0
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 850
12.08.2026, 20:20
Цитата Сообщение от alexu_007 Посмотреть сообщение
Ну, я написал:
...
Интересно - как вы это всё написали, не пользуясь указателями? Берут большие сомнения...
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,351
12.08.2026, 20:24
Цитата Сообщение от jcxz Посмотреть сообщение
Например: как именно использовать динамическую память в си без указателей?
Как организовывать структуры данных типа "связный список" и подобные?
Я не пишу на Си, я пишу на Qt С++. Динамическая память там не нужна от слова вообще, по крайней мере для моих простых проектов. Компилятор сам выделяет память, сколько нужно.
Связный список не нужно писать самому - для этого есть контейнеры, хочеш qt-шные, хочешь std::
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
12.08.2026, 20:27
Цитата Сообщение от alexu_007 Посмотреть сообщение
Ну, я написал:
Полезного чего написал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2026, 20:27

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
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