#26. Указатели. Проще простого | Язык C для начинающих

preview_player
Показать описание


Что такое указатели, зачем они нужны. Объявление указателей. Получение адреса переменных. Изменение переменных через указатели.
Рекомендации по теме
Комментарии
Автор

Не так страшны указатели, как указатели на указатели.

sladge
Автор

Где Вы были 20 лет назад...Супер пояснение. Спасибо огромное !

vladimirastrelin
Автор

За разницу между инициализацией и присваиванием - огромное спасибо!

alexdubkov
Автор

Спасибо вам за понятную, простую, интересную подачу материала! Как жаль, что у меня не было в институте такого преподавателя по Си

smqslho
Автор

Очередной шедевр от Сергея, да еще с юмором и мягким укором в адрес непонимающих эти самые указатели)) Сергей, вы правы, у меня, да и думаю не только у меня, использование указателей вызывает трудности из-за недопонимания сути...Спасибо за подробнейшие разъяснения !!!

vimbor
Автор

Это лучший видео урок по указателям, глупцы

ilyuhagg
Автор

В школе изучал С, это была самая сложная тема и вообще не понял нафига это надо. На этом мое обучение собственно и закончилось. Умеешь разложить на понятные полочки!

andrewbelikov
Автор

Чтобы по началу меньше путаться, можно использовать запись объявления указателя так, что символ указателя ✱ относится к типу, а не к имени (хотя это и не так, т.к это оператор), например
int✱ pointer;
теперь читаем справа налево: pointer это указатель на int. Это воспринимается логичнее, чем
int ✱pointer;
которое интуитивно читается как
✱pointer это переменная типа int. И при инициализации это тоже выглядит более логичным,
int✱ pointer = 0;
т.е, мы именно указателю pointer присваеваем значение 0, а не области памяти на которую он ссылается, как это интуитивно читается в
int ✱pointer = 0;
Это так же логичнее выглядит в аргументах функции. Но стоит иметь ввиду, что это условность, которая может и навредить, например в объявлении
int✱ i, n;
мы не объявляем два указателя на int, как это теперь выглядит, а объявляем указатель на int под именем i, и переменную под именем n типа int, т.е.
int ✱i, n;
(пришлось стандартный символ звездочек заменить на другие т.к. ютуб эти звездочки рядом с текстом интерпритирует как жирный текст и съедает)

weerbox
Автор

Сергей, спасибо за С!!!
Лучшее объяснение

qphgdsb
Автор

Самое лучшее изложение понятия об указателях на русском языке. Спасибо за уроки.

anvarx
Автор

я понял! спасибо! осталось понять нафик они нужны, если есть обычные переменные

zahar
Автор

Теперь все будут задавать вопрос откуда взялся gpd?

bhdtxlc
Автор

Прям как в Delphi ;)
У Си * а у меня ^. Но смысл один :)

Franc_Net
Автор

Можно ли обойтись без указателей, как явления - вот в чём вопрос?.. Нет, с адресами в памяти работать придётся - но нужны ли для этого специальные сущности или это просто синтаксический сахар? Если мы знаем размер адреса (который, видимо, традиционно равен размеру машинного слова), то просто берём целое (знаковое или беззнаковое, как нам удобнее) и храним в нём адрес. Отмечаем в блокнотике или где ещё размер того, адреса чего мы собираемся хранить - и всё! Если в языке существует некий оператор или функция, позволяющий найти ближайшее подходящее место в куче, ищем то место. Если в языке есть оператор или функция, позволяющие разместить переменную по конкретному адресу, используем его! В итоге исчезает вся проблема контекстной зависимости всей этой символики с её звёздочками и амперсандами. Просто работаем с адресами, как с целыми беззнаковыми числами.

DeadnWoon
Автор

int a = 10;
int* gpt;

gpt = &a; //адрес переменной "а" присвоили указатель
a++;
*gpt = a; //переменную "a" увеличенную на единицу перезаписываем по адресу указателя
Еще заняли место под указатели в памяти, помню что указатели как-то работают с функцией, но если под указатели все равно выделяется память, зачем это все, можно работать тогда с глобальной переменной.

zwdtqxi
Автор

Недосмотрел пока, но как понял.

То есть адресом ячейки будет первая ячейка в памяти а остальные в её области будут кагбы частью её? То есть количество этой области ячеек является количество байт выделяемых под неё? Но при это адресом ячейки будет лишь первая ячейка, но последующая область с ней типа повязана)

CetoPizdec
Автор

получается любая целочисленная переменная одновременно является и указателем на какую то другую переменную?

unkdmyc
Автор

А запись integer в ячейки памяти слева-направо (слева младшие разряды, справа старшие разряды) - это условность? Т.е. наверно на разных архитектурах и разных ОС может быть в реальности по-разному? Бывает ли на практике, что C программисты как-то полагаются на определенный порядок?

udgdblz
Автор

Интересно. В следующем уроки будут рассматриваться:
указатели на массив, структуры;
передача указателей в функцию;
Константные указатели и указатели на константные значения?

astarkmn
Автор

Подскажите, все таки какой смысл в указателях, если есть обычные переменные? Вы так и не рассказали)) Только ли передавать массив в функцию? Но ведь можно объявлять глобально массив и из функции к нему обращаться. Была инфа, что глобальные переменные и массивы это дурной тон в Си, так ли это?

AntaresI