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

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

01.11.2023, 17:47. Показов 4990. Ответов 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
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
02.11.2023, 11:50
Студворк — интернет-сервис помощи студентам
Verevkin, вполне себе до такой
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
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
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
02.11.2023, 11:54
Verevkin, например, на самопальном компе было 64к озу, из них половина - под экран и систему. Я пытался накалякать простейший компилятор для ассемблера Z80, мне тупо не хватило места под хранение текста программы на локальном ассемблере
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6311 / 3033 / 1053
Регистрация: 01.06.2021
Сообщений: 11,521
02.11.2023, 12:08
Verevkin, я насчитал 5 функций, а не 4
1) pointer declaration
2) dereference
3) multiplication
4) *= (compound assignment)
5) .* ->* ::* (pointer-to-member)
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.11.2023, 12:10
Цитата Сообщение от Royal_X Посмотреть сообщение
Verevkin, я насчитал 5 функций, а не 4
Родина гордится тобой, Герой!
0
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
02.11.2023, 12:13
Royal_X, а многострочный комментарий?
2
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.11.2023, 12:17
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а многострочный комментарий?
Ну это ты ваще прям с козырей зашёл!!
0
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
6311 / 3033 / 1053
Регистрация: 01.06.2021
Сообщений: 11,521
02.11.2023, 12:21
Verevkin, тот случай, когда у тебя стрит флеш и ты уже считаешь выигрыш, когда тебе соперник бросает в лицо флеш рояль)
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.11.2023, 12:31
Цитата Сообщение от Алексей1153 Посмотреть сообщение
если не ошибаюсь, изначально был только многострочный. Однострочный позжее добавили
Не ошибаешься, так и есть.

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


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

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

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

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

0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
02.11.2023, 12:57
Цитата Сообщение от Verevkin Посмотреть сообщение
Мужики, у меня обед кончается и работать надо.
Да кто тебя держит-то!
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.11.2023, 13:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Да кто тебя держит-то!
Ты держишь.
Пришлось прочитать твой перевод.



Там тоже не сказано, почему символ операции умножения стали использовать для работы с указателями.
0
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
02.11.2023, 13:03
Verevkin, просто красивый значок же
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
Ответ Создать тему
Новые блоги и статьи
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru