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

Не понимаю указатели

01.11.2023, 17:47. Показов 4704. Ответов 93
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почитал всякое, понял, что указатели я скорее не понимаю чем понимаю.
Указатель - это объект, который связан с адресом памяти, верно? А если перед указателем поставить значок амперсенда - то такая запись будет означать сам адрес памяти.
А вот описание функции fopen() http://cppstudio.com/post/1253/
C++
1
FILE * fopen( const char * fname, const char * modeopen );
Параметры функции имеют тип указатель, сама функция тоже возвращает тип указатель. На этом собственно всё понимание и заканчивается. Если сравнивать c аналогичной функцией fopen() в языке PHP, то в PHP вызов функции выглядел бы так:
PHP
1
fhandle=fopen('/home/user/list.txt', 'r');
Как должна выглядеть эта строка в C++и самое главное почему она так выглядеть должна? Если тип 1-го и 2-го параметров не строка, а указатель на символ это как? И как должна будет выглядеть строка инициализации переменной fhandle, что-то типа
C++
1
FILE * fhandle;
у меня эта строка вызывает ошибку
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2023, 17:47
Ответы с готовыми решениями:

Указатели. Не понимаю
Разбираю указатели, слегка запнулся на одном месте. У меня есть функция: void Dit(int &x) { x *= 2; } Использую я...

не совсем понимаю код *указатели
изучаю указатели, столкнулся с кодом не совсем могу понять что происходит в функции *g_s, особенно это условие *p2 && *p2 == *p ...

Правильно ли я понимаю ссылки и указатели. Работу с ними. Я сам прокомментировал код. Скажите правильно или нет.
#pragma once namespace Casper { class Cat { private: unsigned int age; float weight;

93
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
02.11.2023, 11:50
Студворк — интернет-сервис помощи студентам
Verevkin, вполне себе до такой
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 11:52
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Verevkin, вполне себе до такой
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
02.11.2023, 11:53
Цитата Сообщение от Verevkin Посмотреть сообщение
Ну ладно тебе, не до такой же степени!
разница в 2 байта между * и ref.
Тыща указателей в программе - во туже 2 Кб

Еще же и в размере компилятора дело, кстати.

Даже в Pascal для этого ^ используют, хотя казалось бы. (кстати этот ^ - единственное что мне не нравится в синтаксисе Паскаля, ну очень неприметно как-то вышло)
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
02.11.2023, 11:54
Verevkin, например, на самопальном компе было 64к озу, из них половина - под экран и систему. Я пытался накалякать простейший компилятор для ассемблера Z80, мне тупо не хватило места под хранение текста программы на локальном ассемблере
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6102 / 2798 / 1037
Регистрация: 01.06.2021
Сообщений: 10,222
02.11.2023, 12:08
Verevkin, я насчитал 5 функций, а не 4
1) pointer declaration
2) dereference
3) multiplication
4) *= (compound assignment)
5) .* ->* ::* (pointer-to-member)
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 12:10
Цитата Сообщение от Royal_X Посмотреть сообщение
Verevkin, я насчитал 5 функций, а не 4
Родина гордится тобой, Герой!
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
02.11.2023, 12:13
Royal_X, а многострочный комментарий?
2
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 12:17
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а многострочный комментарий?
Ну это ты ваще прям с козырей зашёл!!
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
02.11.2023, 12:20
Verevkin, Royal_X, ещё немного косвенно -
в printf в строке форматов задаёт ширину поля при помощи подстановки значения
C
1
printf("%*s",10,"123");
, а в scanf в строке форматов указывает пропуск (формат считывается, но никуда не пишется)
C
1
2
int a,b;
    scanf("%d%*c%d",&a,&b);
обожаю этот язык

Добавлено через 55 секунд
Цитата Сообщение от Verevkin Посмотреть сообщение
с козырей
если не ошибаюсь, изначально был только многострочный. Однострочный позжее добавили
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.11.2023, 12:20
Цитата Сообщение от Verevkin Посмотреть сообщение
Но не понимаю, зачем так сделали. В интернетах ходит байка, что язык Си был создан ради шутки.
Я же выше показал. Ты сказал "не хочу" смотреть.
В то время был вагон разных терминалов, не все из них имели совместимый набор символов.
Для промышленного языка желательно поддерживать как можно больше современных (на тот момент естественно) решений, это обеспечит возможность широкого распространения и применения на разных платформах.
Это в ответ на вопрос в целом, почему в С такой минималистичный набор символов (да, можно было бы все их заменить какими-то словами, но это тоже накладывает органичения и на размер программы и на время обработки такой программы).

Что касается конкретно *, то вариантов применения в качестве операций у него всего два - это разыменование и знак умножения.
А использование * при объявлении указателя сделано было как раз для простоты, потому что оно отражало использование этого знака в выражениях. В паскале, кстати, такое тоже есть со знаком ^.
https://www.bell-labs.com/usr/dmr/www/chist.html
Для нехочух сделал перевод
Кликните здесь для просмотра всего текста
Вторым нововведением, которое наиболее четко отличает C от его предшественников, является более полная структура типов и особенно ее выражение в синтаксисе объявлений. NB (new B) предложил базовые типы int и char вместе с их массивами и указателями на них, но никаких дополнительных способов компоновки. Требовалось обобщение: имея объект произвольного типа, должна быть возможность описать новый объект, который собирает несколько объектов в массив, возвращает его из функции или является указателем на него.

Для каждого объекта такого составного типа уже существовал способ обратиться к нижележащему объекту: проиндексировать массив, вызвать функцию, использовать оператор косвенного обращения к указателю. Аналогичное рассуждение привело к синтаксису объявления имен, отражающему синтаксис выражения, в котором эти имена обычно появляются. Таким образом,
C
1
int i, *pi, **ppi;
объявляется целое число, указатель на целое число, указатель на указатель на целое число. Синтаксис этих объявлений отражает наблюдение, что i, *pi и **ppi все приводят к типу int при использовании в выражении. Аналогично,

C
1
int f(), *f(), (*f)();
объявляется функция, возвращающую целое число, функцию, возвращающую указатель на целое число, указатель на функцию, возвращающую целое число;

C
1
int *api[10], (*pai)[10];
объявляется массив указателей на целые числа и указатель на массив целых чисел. Во всех этих случаях объявление переменной напоминает ее использование в выражении, тип которого совпадает с типом, указанным в начале объявления.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6102 / 2798 / 1037
Регистрация: 01.06.2021
Сообщений: 10,222
02.11.2023, 12:21
Verevkin, тот случай, когда у тебя стрит флеш и ты уже считаешь выигрыш, когда тебе соперник бросает в лицо флеш рояль)
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 12:31
Цитата Сообщение от Алексей1153 Посмотреть сообщение
если не ошибаюсь, изначально был только многострочный. Однострочный позжее добавили
Не ошибаешься, так и есть.

Добавлено через 5 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
В паскале, кстати, такое тоже есть со знаком ^.
Знак ^ в паскале для умножения не применяется. А так, да, канешна.
Цитата Сообщение от DrOffset Посмотреть сообщение
Для нехочух сделал перевод


Добавлено через 2 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
обожаю этот язык
Сишное форматирование в паскале тоже есть, кстати. Постоянно юзаю.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.11.2023, 12:36
Цитата Сообщение от Verevkin Посмотреть сообщение
Знак ^ в паскале для умножения не применяется.
Я такого не говорил.
Я говорил, в Паскале, как и в Си, знак ^ используется и в объявлениях, и в выражениях.

Добавлено через 3 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Но не понимаю, зачем так сделали.
...
Цитата Сообщение от Verevkin Посмотреть сообщение
Многа букав
Ладно, я так понимаю, что на самом деле ответ тебе был не нужен
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 12:41
Цитата Сообщение от DrOffset Посмотреть сообщение
Я такого не говорил.
Я в том смысле, что в паскале для умножения юзается "*", а не "^".
Цитата Сообщение от DrOffset Посмотреть сообщение
Я говорил, в Паскале, как и в Си, знак ^ используется и в объявлениях, и в выражениях.
Согласен. В основном, для разыменования. Однако, в Delphi (возможно и в FPC) для разыменования указателей при доступе к полям/методам/свойствам структур/экземпляров его (оператор "^") указывать не требуется. В С/С++ это эквивалентно оператору "->".

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Ладно, я так понимаю, что на самом деле ответ тебе был не нужен
Ну, сказали же выше - ШТОБ ЭКОНОМИТЬ ПАМЯТЬ ZX-Spectrum.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.11.2023, 12:52
Цитата Сообщение от Verevkin Посмотреть сообщение
ЭКОНОМИТЬ ПАМЯТЬ ZX-Spectrum.
PDP-7.

Добавлено через 5 минут
Цитата Сообщение от Verevkin Посмотреть сообщение
сказали же выше
Это был ответ на вопрос почему в С не используются слова, вместо знаков, а не почему один и тот же знак используется в стольких местах.
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 12:56
Цитата Сообщение от DrOffset Посмотреть сообщение
Это был ответ на вопрос почему в С не используются слова, вместо знаков, а не почему один и тот же знак используется в стольких местах.
Мужики, у меня обед кончается и работать надо.

0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.11.2023, 12:57
Цитата Сообщение от Verevkin Посмотреть сообщение
Мужики, у меня обед кончается и работать надо.
Да кто тебя держит-то!
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,209
02.11.2023, 13:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Да кто тебя держит-то!
Ты держишь.
Пришлось прочитать твой перевод.



Там тоже не сказано, почему символ операции умножения стали использовать для работы с указателями.
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
02.11.2023, 13:03
Verevkin, просто красивый значок же
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.11.2023, 13:16
Цитата Сообщение от Verevkin Посмотреть сообщение
почему символ операции умножения стали использовать для работы с указателями.
...
Цитата Сообщение от DrOffset Посмотреть сообщение
В то время был вагон разных терминалов, не все из них имели совместимый набор символов.
Для промышленного языка желательно поддерживать как можно больше современных (на тот момент естественно) решений, это обеспечит возможность широкого распространения и применения на разных платформах.
Это в ответ на вопрос в целом, почему в С такой минималистичный набор символов (да, можно было бы все их заменить какими-то словами, но это тоже накладывает органичения и на размер программы и на время обработки такой программы).
Так что это привело к тому, что многие символы из доступных повсеместно стали использовать в разных контекстах, это не только умножение так пострадало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2023, 13:16
Помогаю со студенческими работами здесь

не понимаю указатели
выводится а=5, b=22, c=22, правильно ли это? подскажите, как изменится поведение приложения если все указатели создавать через ...

Не понимаю как переделать переменные в указатели
Дали такое задание и не могу ничего понять Программа конвертирует введенный текст с английского на русский (транслит), нужно поменять...

не понимаю как делать. Динамические масивы, указатели и работа с ними
не понимаю как делать, мне сказали через if, но меня это еще больше запутало, нет идей вообще! в четверг последний срок сдачи ...

Нужно отредачить код, добавив указатели и разделив исходную функцию на две. Как это сделать - я не особо понимаю :(
Нужно отредачить код, добавив указатели и разделив исходную функцию на две. Как это сделать - я не особо понимаю :( #include...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru