#34. Двумерные и многомерные массивы. Указатели на двумерные массивы | Язык C для начинающих

Поделиться
HTML-код
  • Опубликовано: 6 янв 2025

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

  • @valk9819
    @valk9819 10 месяцев назад +6

    Сказать что я офигел нечего не сказать. Это было не просто круто, это было сами знаете как круто

  • @ГородскойКовбой
    @ГородскойКовбой 2 месяца назад +4

    Классная тема, после нее отваливается большинство народу пытающихся изучить язык c, особенно после того, что сказано в конце)

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

    Шикарные уроки! Божественный дар преподавания!

  • @SavvaSavva-i5t
    @SavvaSavva-i5t Год назад +29

    Всем со Школы 21 привет 😀

    • @tony_slark4757
      @tony_slark4757 11 месяцев назад +2

      Это ад )

    • @wegasw7265
      @wegasw7265 9 месяцев назад

      ​@@tony_slark4757 здоровья погибшим

    • @SHIRZA1
      @SHIRZA1 6 месяцев назад

      Здарова мужик😂

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

      Привет-привет! июльский бассейн теперь просмотры накручивает...

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

      Бассейн от 16 сентября, хеллоу

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

    Да давай ура давай вперед!!!!!!

  • @ЕвгенийРазепов
    @ЕвгенийРазепов Год назад +3

    Это реально очень круто.

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

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

  • @Jeff-cn4sf
    @Jeff-cn4sf Год назад +1

    Лично мне такая запись была яснее, мало ли кому непонятно было)))
    int arr_size = sizeof(playground);
    int row_size = arr_size / sizeof(*playground);
    int col_size = sizeof(*playground) / sizeof(**playground);
    Спасибо за уроки!

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

    Спасибо Вам за уроки!
    Круто,просто нереально.Читаете мои мысли,отвечая на вопросы.
    Просто СУПЕР!!!!!!!!!👍🏻

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

    Хороший урок

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

    7:38 Через запятую индексы прописывать можно, но это будет означать совсем не обращение к элементу многомерного массива. И это частая ошибка начинающих, особенно тех, кто ранее программировал на Паскале или Бейсике. Если написать ar[i, j, k] , то ошибки (синтаксической) не будет, в Си это вполне допустимая запись. Но это не три индекса, это один индекс, задаваемый операцией "следование" (операция обозначается как ","). Т.е. для вычисления индекса компилятор возьмем i, потом возьмет j, потом возьмет k и значение всего выражения в квадратных скобках будет равно k. Поэтому ar[i, j, k] означает то же самое, что и ar[k]. А чтобы обратится именно к элементу массива нужно каждый индекс прописать в отдельных квадратных скобках ar[i][j][k]

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

      да, век живи, век учись, спасибо!

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

    спасибо

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

    Было бы интересно узнать про работу со вложенными массивами, типа [ name, value, [ [ name, value,[ ] ], [ name, value, [...

  • @Green_place23
    @Green_place23 8 месяцев назад +1

    Прошу поправить если не прав, при передаче массива в функции, его размер подсчитать с помощью sizeof не получиться.

    • @selfedu_rus
      @selfedu_rus  8 месяцев назад

      да, т.к. передается не массив, а указатель на него (хотя, в C++ можно передать массив по ссылке и там размер известен)

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

    не понимаю почему ты говоришь что char (*p)[3] это указатель на двумерный массив. Это же указатель на одномерный массив из 3ех элементов, где каждый элемент это чар

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

      то, что вы говорите - это:
      char *p[3];
      а если нам, например, в функцию нужно передать двумерный массив, то параметр записывается, как указано в видео

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

      @@selfedu_rus Вроде разобрался. char *arr[3] оказался массивом из 3ех элементов, где каждый элемент это указатель на чар. Тут arr именно массив, то есть присвоить arr новый указатель нельзя, а char(*p)[3] - это указатель на массив из чаров и тут можно менять адрес указателя p.
      Что касается передачи в функцию массива в виде параметра у нас по сути есть 2 варианта. Либо мы передаем указатель на первый элемент, либо передаем указатель на весь массив в типе которого будет длина этого массива.
      void foo(int *arr) {
      // тут у нас есть просто указатель на инт
      };
      void bar(int (*arr)[3]) {
      // тут мы даже сможем получить sizeof(*arr) благодаря длине в типе
      };
      int main(void) {
      int arr[3] = {1,2,3};
      foo(arr);
      bar(&arr);
      }
      Причем в случае когда мы передаем просто ссылку на первый элемент как в функции foo у нас нет никакой гарантии, что туда передается именно массив. Никто не запретит мне в main сделать так -
      int i = 5;
      foo(&i);
      Когда параметр имеет такую запись int (*p)[3], точно так же как и с foo нет никакой гарантии, что это будет двумерный массив, возможно кто-то передаст одномерный массив как в примере с bar. А указатель на двумерный масив насколько я понимаю будет выглядеть как то так - int (*arr)[3][3]
      int arr[3] - arr это массив из трех элементов, где каждый элемент это инт
      int *arr[3] - arr это массива из трех элементов, где каждый элемент это указатель на инт
      int (*arr)[3] - arr это указатель на массив из трех элементов, где каждый элемент это инт

    • @Grandize
      @Grandize 11 месяцев назад

      Ну в принципе, всё то, что уважаемый преподаватель и сказал в видео 😂

    • @pewpewpew8613
      @pewpewpew8613 11 месяцев назад

      @@Grandize Не совсем. Я выше всё расписал.
      указатель на двумерный массив это int (*arr)[3][3]
      а int (*arr)[3] это указатель на одномерный массив из 3ех интов и ради примера я передал в функцию bar одномерный массив, где аргумент имеет ровно такой же тип.
      Это все равно что сказать что int *num это обязательно указатель на массив из интов, а не просто указатель на инт