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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ต.ค. 2024
  • Практический курс по C/C++: stepik.org/cou...
    Телеграм-канал: t.me/java_and_c
    Инфо-сайт: proproprogs.ru...
    Объявления двумерных и многомерных массивов. Представление таких массивов в памяти устройства. Обращение к отдельным элементам многомерных массивов. Указатели на многомерные массивы.

ความคิดเห็น • 26

  • @SavvaSavva-i5t
    @SavvaSavva-i5t 10 หลายเดือนก่อน +25

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

    • @tony_slark4757
      @tony_slark4757 8 หลายเดือนก่อน +2

      Это ад )

    • @wegasw7265
      @wegasw7265 6 หลายเดือนก่อน

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

    • @SHIRZA1
      @SHIRZA1 3 หลายเดือนก่อน

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

    • @nikitakakoito
      @nikitakakoito 2 หลายเดือนก่อน +1

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

    • @djonreek
      @djonreek 5 วันที่ผ่านมา

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

  • @Green_place23
    @Green_place23 5 หลายเดือนก่อน +1

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

    • @selfedu_rus
      @selfedu_rus  5 หลายเดือนก่อน

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

  • @valk9819
    @valk9819 7 หลายเดือนก่อน +4

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

  • @vasyapupkin69cyber
    @vasyapupkin69cyber ปีที่แล้ว +3

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

  • @Jeff-cn4sf
    @Jeff-cn4sf ปีที่แล้ว +1

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

  • @mmxbow
    @mmxbow ปีที่แล้ว +1

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

  • @ЕвгенийРазепов
    @ЕвгенийРазепов ปีที่แล้ว +2

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

  • @pewpewpew8613
    @pewpewpew8613 10 หลายเดือนก่อน +2

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

    • @selfedu_rus
      @selfedu_rus  10 หลายเดือนก่อน

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

    • @pewpewpew8613
      @pewpewpew8613 10 หลายเดือนก่อน +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 8 หลายเดือนก่อน

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

    • @pewpewpew8613
      @pewpewpew8613 8 หลายเดือนก่อน

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

  • @MegaGalver
    @MegaGalver ปีที่แล้ว +1

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

  • @andredru4278
    @andredru4278 8 หลายเดือนก่อน +1

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

  • @citizenfour2951
    @citizenfour2951 ปีที่แล้ว +1

    Хороший урок

  • @РусланКарнеенко
    @РусланКарнеенко 8 หลายเดือนก่อน +1

    спасибо

  • @olegkomlev
    @olegkomlev 11 หลายเดือนก่อน +2

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

    • @selfedu_rus
      @selfedu_rus  11 หลายเดือนก่อน +1

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

  • @youripink4591
    @youripink4591 ปีที่แล้ว +1

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