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

Поделиться
HTML-код
  • Опубликовано: 26 сен 2024
  • Практический курс по C/C++: stepik.org/cou...
    Телеграм-канал: t.me/java_and_c
    Инфо-сайт: proproprogs.ru...
    Указатели для работы с разными типами данных. Присваивание адресов между указателями. Приведение типов между указателями. Предопределенная константа NULL.

Комментарии • 39

  • @donfedor007
    @donfedor007 Год назад +3

    Спасибо огромное за Ваш труд!

  • @MegaGalver
    @MegaGalver Год назад +2

    Замечательные объяснения!

  • @andredru4278
    @andredru4278 8 месяцев назад +2

    Спасибо. Все понятно.

  • @РусланКарнеенко
    @РусланКарнеенко 8 месяцев назад +2

    Спасибо

  • @norskiy9765
    @norskiy9765 Год назад +3

    Балин, я уже с# учу, дали бы мне курс месяцев 7 назад(когда я учил си по курсам Гоши дударя) я бы учил бы си)

  • @sad-wl2qk
    @sad-wl2qk 2 месяца назад +2

    С 769 осторожно. Поведение будет зависеть от порядка хранения байт в памяти платформы , в Intel x86 это будет Little Endian

  • @saintshell3190
    @saintshell3190 Год назад +2

    Когда курс на степике появится?
    ПС: пните когда откроют, спасибо ^_^

  • @andrey_sautenko
    @andrey_sautenko Год назад +3

    Сергей, здравствуйте! может я что-то не уловил, но пока так и не ясен самый главный смысл , т.е. "сакральность" указателей. Ну можем мы работать с ячейкой памяти напрямую через указатель, можем через переменную и.....все? Или тема указателей еще не закрыта? Если что, заранее извиняюсь за нетерпение))))

    • @selfedu_rus
      @selfedu_rus  Год назад +3

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

    • @andrey_sautenko
      @andrey_sautenko Год назад +2

      @@selfedu_rus спасибо за ответ!) тогда жду следующие лекции!

  • @Al-en6nj
    @Al-en6nj Год назад +5

    Спасибо большое за Ваш труд

  • @Maksim534
    @Maksim534 11 месяцев назад +1

    Идёт уже второй урок, так и не понимаю, для чего указатели, без объявления переменной они не работают, при объявлении переменной в памяти итак выделяется место, тогда какую функцию несут указатели? Определить точное место куда мы будем записывать значение? Для подмена типа данных?

  • @vkatasonov
    @vkatasonov Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      Спасибо! Ставится точка останова и нажимаете Ctrl+Shift+D (у меня так, Run and Debug).

  • @tarzeronone7274
    @tarzeronone7274 Год назад +3

    После С будут плюсы? Хотелось бы в таком виде просмотреть курс по Rust

    • @Eugene-p2o
      @Eugene-p2o Год назад

      плюсы же уже есть

    • @tarzeronone7274
      @tarzeronone7274 Год назад

      @@Eugene-p2o О спасибо, не видел их, нужно просмотреть, тогда жду rust

  • @CraNok55
    @CraNok55 3 месяца назад +1

    8:17 значение - 769, код выполнился за 769 миллисекунд. Совпадение? 🤨

  • @catsaur5991
    @catsaur5991 Год назад +1

    Друзья, а как все-таки правильно, нулл или налл ?) И еще, а что за зажигательный музон играет в конце каждого видео? Усидеть на месте, нереально! А видос познавательный, ждем еще.

    • @segeus
      @segeus Год назад

      Если по-английски то НАЛ
      Если по-немецки то НУЛь

    • @catsaur5991
      @catsaur5991 Год назад

      @@segeus а по китайски вроде вот так - 空值 .

  • @DekartMusic
    @DekartMusic Год назад +1

    А можно вопрос, откуда вы учились у Си? Просто после вашего курса я хочу еще почитать литературы, в том числе и Книга Герберта Шилдта "Си, полное руководство, классическое издание", и там можно создать свой ЯП, или мне еще придется читать литературу?

    • @selfedu_rus
      @selfedu_rus  Год назад +6

      Сложно мне ответить на ваш вопрос. Просто я его 20 лет назад осваивал и потом много использовал в проектах (правда там был С++, но не суть). Сейчас, чтобы все детали верно озвучивать, ориентируюсь на книги Стивена Пратта и Столярова Искусство программирования.

  • @azatmuhitov3098
    @azatmuhitov3098 Год назад +1

    18 недоступных видео скрыто. это как?

  • @donfedor007
    @donfedor007 Год назад

    Ответ на вопрос чем плохи переменные будет дальше?

  • @1975nacgul
    @1975nacgul 5 месяцев назад +1

    int это же 2 байт илм 16 бит, а увас 4 байта. Как так? .

    • @selfedu_rus
      @selfedu_rus  5 месяцев назад +1

      в 32 и 64-разрядных системах, как правило, 4 байта

    • @1975nacgul
      @1975nacgul 5 месяцев назад

      @@selfedu_rus т.е. не обязательно, по-желанию.

    • @5классвиленкин-ъ4п
      @5классвиленкин-ъ4п 4 месяца назад

      @@1975nacgulпо желанию чьему? Нужно по-разному смотреть на каждую систему

  • @alittleprince
    @alittleprince Год назад +2

    Почему сразу так не сказать?..Вся тема в нескольких основных тезисах: (извините, я конспект пишу за Вами на английском)
    Pointers are designed to write and read data from any memory cells and store theirs addresses with data.
    They are denoted witn the sign '*', for example, as
    'char *gpt' and divided into the following variable types:
    char *gpt; (memory area - 1 byte),
    int *gpt; (memory area - 4 bytes),
    double *gpt; (memory area - 8 bytes).
    The pointers in OSx86 - is allocated 4 bytes of memory;
    in OSx64 - is allocated 8 bytes of memory.
    Pointer notation construction:
    chat d = 10; memory allocation operation for the variable 'd';
    char *gpt; declaration of pointer for working with data type 'char';
    gpt = &d; assignment operation of value 'd' to pointer 'gpt';
    char x = *gpt; value read operation from memory cell of variable 'd';
    *gpt = 100; value write operation to memory cell of variable 'd';
    short *a, *b, *c; declaration of 3 pointers in one data type.*/
    General expression type 'void *' is used to save adresses of variables, but it is not to use with memory cells (*p = 10; : error: invalid use of void expression);
    Pointers. Practice problems:
    - when pointer refers to an unallocated memory area and
    some value is bieng written.
    - when memory is in a program dynamically allocated
    (by using 'malloc'function) and not freed (memory leak).
    Example:
    //int arg = 5;
    //int *ptr = NULL; //NULL is equivalent to &arg, int *ptr = &arg;
    //If(ptr != NULL)
    // *ptr = 1;
    // А у Вас столько слов на три видео растянуто и в итоге голова кругом и сложнее для понимания ...

  • @СергейК-л5д3ч
    @СергейК-л5д3ч 10 месяцев назад +2

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

    • @selfedu_rus
      @selfedu_rus  10 месяцев назад +2

      об этом дальше, когда дойдем до функций, также будет пример с динамическим массивом

    • @sembips5631
      @sembips5631 5 месяцев назад

      В примитивных программах в целом то и не нужны. Банально любую структуру данных без указателей не реализовать

  • @КРУГДРУЗЕЙ-д1в
    @КРУГДРУЗЕЙ-д1в 11 месяцев назад +2

    объясните пожалуйста тупому (6:57) в какой системе счисления 777 = 9 + 256 *3 (запись в байтах 9 3 0 0) и 769 = 1 + 256 *3 (запись в байтах 1 3 0 0). В шестнадцетиричной системе должны быть цифры 777(запись в байтах 0 3 0 9) и 769 (запись в байтах 0 3 0 1). Не могу разобраться

    • @svvonline1
      @svvonline1 8 месяцев назад +2

      Ну смотрите, integer - это 4 байта (в данном случае). В шестнадцатиричной системе 0x 00 00 03 09. Представление в памяти идет с младшего байта к старшему, т.е. 0x 09 03 00 00, в отличии от привычной записи. Ну и следует отметить, что в шестнадцатиричной системе один разряд - это 4 бита. Заменив значение 4 бит на значение байтов получим 9300, т.е 09=9, 03=3, 00 =0. Отвечая на ваш вопрос - это или десятиричная или шетнадцатеричная система - для одного байта - это неважно, так как значения (9 и 3) не превышает 9.
      Что касается выражений 777 = 9 + 256 *3 и 769 = 1 + 256 *3 это типа 256 битной системы счисления, т.е. основание 256 - т.е. диапазон одного байта, а далее каждому разряду соответствует степень основания, младшему 9 - 0 степень, т.е. 9 * 256 ** 0, следующему 3 - 1, т.е. 3 * 256, следующему 0 - 2 степень, т.е. 0 * 256 *256 и так далее. Как в любой позиционой системе счисления.

    • @sxnity6808
      @sxnity6808 3 месяца назад

      Немного добавлю парня выше. Информацию в памяти можно представлять в двух последовательностях: big endian и little endian. В случае с примером Сергея у него little endian машина как и большинства. Это означает что младшие **байты** идут первыми.
      Наглядный пример: 2048
      2048 в двоичной системе исчисления 0000 1000 0000 0000. В 16ричной системе 08 00. Тут 08 это старший **байт**, следовательно 00 младший **байт**.
      В случае с little endian компьютер сохранит 08 00 как:
      00 08.

  • @VladLyashko
    @VladLyashko Год назад

    Здраствуйте,спасибо за инфо,хотелось в будущем вин апи

  • @jamjam3337
    @jamjam3337 Год назад +1

    спасибо!👏👍