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

Практический курс по C/C++: stepik.org/course/193691/
Телеграм-канал: t.me/java_and_c
Инфо-сайт: proproprogs.ru/c_base
Что такое указатели, зачем они нужны. Объявление указателей. Получение адреса переменных. Изменение переменных через указатели.

Пікірлер: 97

  • @Numagic
    @Numagic6 күн бұрын

    Это прекрасно даже в 2024 xD спасибо🙏

  • @sladge17
    @sladge17 Жыл бұрын

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

  • @vladimirastrelin1719
    @vladimirastrelin1719 Жыл бұрын

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

  • @user-tf3dk5ev5k

    @user-tf3dk5ev5k

    24 күн бұрын

    В школе наверно

  • @alexdubkov6998
    @alexdubkov6998 Жыл бұрын

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

  • @user-sm8qs2lh8o
    @user-sm8qs2lh8o16 күн бұрын

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

  • @vimbor5034
    @vimbor5034 Жыл бұрын

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

  • @Nas-troe
    @Nas-troe8 ай бұрын

    Храни тебя Бог добрый человек

  • @user-qp8hg4ds2b
    @user-qp8hg4ds2b Жыл бұрын

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

  • @blackbirdalternativedevelo1068
    @blackbirdalternativedevelo10687 ай бұрын

    Очень качественно и доходчиво!

  • @ilyuhagg8546
    @ilyuhagg85468 ай бұрын

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

  • @MegaGalver
    @MegaGalver9 ай бұрын

    Очень доходчиво, спасибо!

  • @user-cg4cp6br5h
    @user-cg4cp6br5h9 ай бұрын

    Супер объяснение! Я даже понял)

  • @user-uu9xi3rv8o
    @user-uu9xi3rv8o7 ай бұрын

    Лучшее объяснение указателей!

  • @andrey_sautenko
    @andrey_sautenko Жыл бұрын

    спасибо за урок!

  • @AndrewOBannon
    @AndrewOBannon Жыл бұрын

    Сергей, спасибо тебе.

  • @andrewbelikov8772
    @andrewbelikov8772 Жыл бұрын

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

  • @donfedor007
    @donfedor007 Жыл бұрын

    Спасибо Вам огромное!!!

  • @andredru4278
    @andredru42784 ай бұрын

    Спасибо. Вот это да!

  • @weerbox
    @weerbox Жыл бұрын

    Чтобы по началу меньше путаться, можно использовать запись объявления указателя так, что символ указателя ✱ относится к типу, а не к имени (хотя это и не так, т.к это оператор), например 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; (пришлось стандартный символ звездочек заменить на другие т.к. ютуб эти звездочки рядом с текстом интерпритирует как жирный текст и съедает)

  • @olegkomlev

    @olegkomlev

    7 ай бұрын

    Да, это очень важно замечание, спасибо. Видимо, при выборе такого синтаксиса объявлений указателей подразумевалось, что ✱ - операция разыменования ,т.е. звездочка относится к идентификатору переменной, а не к типу (стоит перед именем переменной, а не после имени типа). Поэтому int ✱i, n; означает "после разыменования i получится l-value типа int, а n - это сразу переменная типа int". Такое смысловое объединение звездочки и переменной важно, потому что в С указатели применяются для выходных параметров функции. В Паскале можно написать перед формальным параметром var x:integer (а в С++ написать int &x ) и потом в теле функции и при вызове можно использовать только саму переменную. Но в Си в качестве фактического аргумента в таких случаях нужно писать &x (мы уже видели это на примере scanf), а в функции везде выполнять разыменование, т.е. вместо переменной х писать ✱х, считая ✱х единым целым (единым выходным параметром). Забыть звездочку для выходной переменной в теле функции или & при вызове такой функции - частая ошибка новичков.

  • @alekskapitonov2738
    @alekskapitonov2738 Жыл бұрын

    Спасибо!

  • @jamjam3337
    @jamjam333711 ай бұрын

    спасибо!👏👍

  • @n.o.H.o.c
    @n.o.H.o.c2 күн бұрын

    Это что получается, если просто присвоить переменной другое значение, то изменятся адреса ячеек где хранится эта переменная, а указатели позволяют менять значение переменной, не меняя адреса ячеек ?

  • @user-xm5zl9up4r
    @user-xm5zl9up4r4 ай бұрын

    Супер

  • @user-xr1sr4pz4z
    @user-xr1sr4pz4z Жыл бұрын

    топчик

  • @zahar1381
    @zahar1381 Жыл бұрын

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

  • @sladge17

    @sladge17

    Жыл бұрын

    Например при динамическом выделении памяти.

  • @user-un9kd7my5c
    @user-un9kd7my5c11 ай бұрын

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

  • @Franc_Net
    @Franc_Net7 ай бұрын

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

  • @CetoPizdec
    @CetoPizdec2 ай бұрын

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

  • @user-ud2gd7bl1z
    @user-ud2gd7bl1z9 ай бұрын

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

  • @selfedu_rus

    @selfedu_rus

    9 ай бұрын

    да, на разных устройствах по разному может быть

  • @user-it3yo1sn6i
    @user-it3yo1sn6i Жыл бұрын

    Спасибо за знания. Имя указателя можно использовать любое? Не обязательно *gpt?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    да, любое, также как и имя переменной

  • @anvarx1
    @anvarx1 Жыл бұрын

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

  • @user-bh1dt3xl7c
    @user-bh1dt3xl7c Жыл бұрын

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

  • @user-un7uz9id6w
    @user-un7uz9id6w27 күн бұрын

    Здравствуйте, можете подсказать пожалуйста, почему когда у нас тип int, то так странно расписывается на 4 байта число, в один байт нельзя вписать число 75432? И ещё, указатель указывает только на адрес первого байта переменной типа int, почему тогда сам он занимает 8 байт?

  • @selfedu_rus

    @selfedu_rus

    27 күн бұрын

    База! Напишите это в ТГ-канал по Си, вам сообщество с удовольствием во всех деталях распишет.

  • @user-zw3dt4qx3i
    @user-zw3dt4qx3i Жыл бұрын

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

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Зачем нужны будет дальше. А использование глобальных переменных крайне плохая практика для Си.

  • @astarkmn
    @astarkmn Жыл бұрын

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

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    да, все это будет + указатели на функции

  • @kyami8718
    @kyami87189 ай бұрын

    А если я возьму не один тип (допустим int),а два разных.Можно ли использовать приведение типов?

  • @selfedu_rus

    @selfedu_rus

    9 ай бұрын

    для этого приведение и реализовано в Си

  • @baxram97
    @baxram97 Жыл бұрын

    Можете сделать видео про то, как сделать свой string на Си?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Про строки дальше. Как свой string - это уже С++ и классы.

  • @baxram97

    @baxram97

    Жыл бұрын

    @@selfedu_rus можно ведь и на Си, используя malloc и struct

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    @@baxram97 такой красоты, как с ООП не получится, т.к. в чистом Си struct не может перегружать операторы

  • @user-lp6if6zr4o
    @user-lp6if6zr4o3 ай бұрын

    Ребят, не подскажите какую программу автор использует для написания кода?

  • @selfedu_rus

    @selfedu_rus

    3 ай бұрын

    В самом начале отмечается: VS Code

  • @user-lp6if6zr4o

    @user-lp6if6zr4o

    3 ай бұрын

    @@selfedu_rus понял,спасибо!

  • @user-cm1ri1sn2u
    @user-cm1ri1sn2u8 ай бұрын

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

  • @selfedu_rus

    @selfedu_rus

    8 ай бұрын

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

  • @AntaresI1024
    @AntaresI10243 ай бұрын

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

  • @selfedu_rus

    @selfedu_rus

    3 ай бұрын

    См. раздел по функциям - ответ там.

  • @alexbobtail4862
    @alexbobtail4862 Жыл бұрын

    Это про С или про С++? Язык С без плюсов еще применяется?

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    Это Си, и это первый шаг в изучении С++, т.к. он развитие языка Си.

  • @vovkodinak2416

    @vovkodinak2416

    Жыл бұрын

    C без плюсов применяется и будет применятся. Он используется для написания прошивок для микроконтролеров. Для обычных компов на С пишут драйвера для работы с устройствами.

  • @michaelplatonov

    @michaelplatonov

    Жыл бұрын

    всё ядро линукса написано на си, без плюсов, и плюсов там никогда не будет:)

  • @lemmenmin7676

    @lemmenmin7676

    Жыл бұрын

    @@michaelplatonov не верю, там уже Rust "разрешили"

  • @michaelplatonov

    @michaelplatonov

    Жыл бұрын

    @@lemmenmin7676 ну так rust это не плюсы, и это уже не gnu и так далее)

  • @alexnavin8833
    @alexnavin88339 ай бұрын

    Чем отличается d = 10; от *&d = 10; ?

  • @selfedu_rus

    @selfedu_rus

    9 ай бұрын

    ничем (на уровне машинных кодов), по крайне мере, в смысловом значении

  • @nickolayivanov670
    @nickolayivanov6703 ай бұрын

    8:59 - Я так и не понял где ответ на главный вопрос. Зачем создавать ещё одну переменную с адресом другой переменной, а не обращаться к ней непосредственно по имени. Извините, я тупенький. Мне непонятно.

  • @selfedu_rus

    @selfedu_rus

    3 ай бұрын

    об этом в функциях, когда речь пойдет об указателях в их параметрах

  • @nickolayivanov670

    @nickolayivanov670

    3 ай бұрын

    @@selfedu_rus Спасибо. Будем смотреть)

  • @VladGavrilov
    @VladGavrilov7 ай бұрын

    char *gpt - это отсылка на ChatGPT?🤔

  • @MrALEXUS100
    @MrALEXUS100 Жыл бұрын

    Мне кажется, что до этого видео я понимал лучше, что такое указатели. С этими ячейками памяти муть какая-то, зачем это число(адрес) раскладывать так и не понял

  • @selfedu_rus

    @selfedu_rus

    Жыл бұрын

    А как вы целые числа больше 255 будете хранить?

  • @MrALEXUS100

    @MrALEXUS100

    Жыл бұрын

    @@selfedu_rus то, что число имеют свое представление в двоичной системе я понимаю, но относится ли это к вопросу указателей, по моему это не нужные подробности, которые только отвлекают от главного. эти разложения можно можно сделать как дополнение к теме указателей. я сам только учусь, не воспринимайте пожалуйста мои слова как критику, а как вопрос в голове студента-самоучки

  • @michaelplatonov

    @michaelplatonov

    Жыл бұрын

    а ещё указатель может быть на функцию:)

  • @grayich

    @grayich

    Жыл бұрын

    @@selfedu_rus Тоже думал, что числа хранятся в развёрнутой на несколько байт двоичной форме. А оказалось раскладывается побайтово-разрядно.. кстати. есть у этого метода название?

  • @MrALEXUS100

    @MrALEXUS100

    Жыл бұрын

    @@michaelplatonov вот было бы круто, если бы на двух половинах экрана сравнили, как все работает через обычню переменную, и как через указатаель. как по мне так есть просто три сущности, значение, адрес и имя переменной, и все взаимодействие со значением происходит по двум сценариям - через переменную(которая все равно ссылается на указатель) или через указатель напрямую

  • @user-se2ms5rd8o
    @user-se2ms5rd8o3 ай бұрын

    Моя удача что я не начал изучать в Си в таком изложении,ничего бы не понял,много воды.Я изучал указатели в другом,понятном изложении,вот там все было понятно.Ничего личного.

  • @IrinaBod

    @IrinaBod

    2 ай бұрын

    а где вы учили указатели?

  • @-ij8ym
    @-ij8ym25 күн бұрын

    Gpt gpd. Кто так объясняет? Не надо хайповать. А называть как принято pointer, ptr. Палец вниз.