Двумерные массивы в Си: обычные и динамические

  Рет қаралды 70,813

Тимофей Хирьянов

Тимофей Хирьянов

5 жыл бұрын

Обычные двумерные массивы в С.
Передача двумерного массива в функцию.
Динамические двумерные массивы в С.
Выделение и освобождение памяти для динамического двумерного массива.
Передача динамического двумерного массива в функцию и возврат из функции.
Курс молодого бойца по информатике (Язык Си).
cs.mipt.ru/c_intro

Пікірлер: 78
@user-dd6pz2wt6z
@user-dd6pz2wt6z 2 жыл бұрын
Спасибо огромное, ученики школы 21 зимнего бассейна 2022 года благодарны вам!
@mksmvnv
@mksmvnv 6 ай бұрын
Спасибо Вам большое, ученики школы 21 осеннего бассейна 2023!
@danielklimovoff
@danielklimovoff 2 жыл бұрын
Ученики школы 21 снова передают вам привет и огромное спасибо
@nikitatikhonov5187
@nikitatikhonov5187 2 жыл бұрын
Спасибо вам большое от учеников школы 21 (14/02/2022)
@sekta817
@sekta817 2 жыл бұрын
ученики школы 21 вам благодарны
@SunRise15338
@SunRise15338 2 жыл бұрын
На месте😎
@rajahbtw
@rajahbtw 2 жыл бұрын
Заха
@serafimr.3648
@serafimr.3648 Жыл бұрын
Отдыхаем
@candarly
@candarly 6 ай бұрын
однозначно!
@user-hc1yw4tu8t
@user-hc1yw4tu8t Жыл бұрын
Спасибо! School 21 21/09/22 - sheritsh
@dimalink4486
@dimalink4486 Жыл бұрын
Поздравления! Дима праздник! У Димы праздник! Я все закончил с этим!! Праздник! Как раз майские праздники! Да, многомерный массив- штука крайне хитрая.... ЗВерята радуются! Цыпленок радуется! Утенок радуется! Дима радуется! кролик радуется! Совенок радуется!!🐤🦉🦆🐸🐧🐦
@Mani_Fast
@Mani_Fast 2 жыл бұрын
СПАСИБО Вам Тимофей за все курсы, каждый урок бесценен, иногда смотрел по 2-3 раза просто для кайфа и укладки, еще хочу сказать спасибо Вам за уроки в Фоксфорде. Вы настоящий джедай. (надеюсь когда-нибудь с вами встречусь)
@Master_Mollan
@Master_Mollan 8 ай бұрын
я 7 часов искал причину вылета, оказалось что забыл поставить звезду во втором инте при объявление двумерного динамического массива, у тебя +1 подписчик теперь)
@McGewen
@McGewen 4 жыл бұрын
ахренеть как доходчиво оба метода будут полезными! огромное спасибо!!!!!!!!!
@bishop_ru6767
@bishop_ru6767 3 жыл бұрын
Благодарю за лекцию. Очень жалко, что все так быстро закончилось. Динамический двумерный массив как-то тяжело прошел. Как-нибудь под настроение, пожалуйста, сделайте продолжение.
@vitalic853
@vitalic853 Жыл бұрын
Огромное человеческое спасибо за столь прекрасные уроки
@user-ry6go9cw9o
@user-ry6go9cw9o Жыл бұрын
Спасибо большое от дядьки 36 лет =) Просто бог объяснения ^^
@tolstenev_gleb
@tolstenev_gleb Жыл бұрын
Новомодный способ одного маллока не работает. Тимофей Фёдорович, будем признательны, если разберёте его более подробно с выводом на экран элементов и назначением отдельных элементов.
@halavich9672
@halavich9672 5 жыл бұрын
Спасибо за инфу. Очень помогло
@le0messi
@le0messi 6 ай бұрын
Спасибо вам от учеников школы 21!!!!
@ukrainianeye2545
@ukrainianeye2545 3 жыл бұрын
Большущее спасибо, тяжело понять материал, пришлось Ваш код взять
@yesugibe7041
@yesugibe7041 4 жыл бұрын
Не получилось с помощью кода из видео указателем пройти по динамическому массиву. Сначала все хорошо: проходит массив А[0] и выводит 1, 2, 3, 4, 5 в нашем случае. А дальше шагает физически по памяти до самого конца или до последнего элемента массива A[3], как получится :) Повозившись с кодом проблему так же решить не смог. Как тут быть и правильно гулять по элементам массива с помощью поинтеров?
@user-nu1jj6bt9j
@user-nu1jj6bt9j 3 жыл бұрын
Спасибо большое
@hakimovKam
@hakimovKam Жыл бұрын
привет и спасибо от учеников школы 21!:)
@arzimanoff
@arzimanoff 8 ай бұрын
привет от августовского (2023 г) интенсива школы 21! Peer to peer
@candarly
@candarly 6 ай бұрын
будущим бассейнистам шк 21 привет :))
@tkhirianov
@tkhirianov 6 ай бұрын
И вам не болеть!
@day_spa
@day_spa 2 жыл бұрын
Вся школа 21 ликует. Спасибо!
@yuliyacher67
@yuliyacher67 Жыл бұрын
Спасибо!
@shoqun6360
@shoqun6360 Жыл бұрын
Ученики благодарны вам с августовского бассейна
@user-ig8fh5cx4u
@user-ig8fh5cx4u 2 жыл бұрын
спасибо!
@ginger.samurai
@ginger.samurai Жыл бұрын
Привет от детей школы 21
@arvgo41
@arvgo41 9 ай бұрын
Вот что непонятно, зачем нам создавать отличные структуры при работе с статическим и динамическим, почему бы просто не создать в динамической памяти аналог статического двумерного массива? без лишнего набора ссылок? Вся эта канитель, с динамическим массивом, нужна чтоб удобным способом [ ][ ] получать доступ к данным, и код читаемым был. Но для этого нам нужно сделать неудобную реализацию и лишнюю память использовать на указатели. Что и скорость снизит. Так же хотелось бы узнать как не ровный двумерный массив реализуется, где подмассивы разного размера.
@ZStanislav
@ZStanislav 4 жыл бұрын
Меньше писанины и лучшее распределение памяти - это по мне )
@X-Under
@X-Under 2 жыл бұрын
А как вам такой вариант? #include #include void print_array2(int *arr, int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) printf("%5d", *(arr + i * col + j)); printf(" "); } } int main() { int m[3][5] = {0}; print_array2(&m[0][0], 3, 5); return 0; } Идея в том, что мы просто передаём в функцию адрес первого элемента массива, а дальше всё вычисляем с помощью адресной арифметики. При этом функция получается универсальной, нет никаких дефайнов или страшных двойных указателей.
@abstergo72
@abstergo72 Жыл бұрын
А если размеры вводит пользователь?
@programer8
@programer8 3 жыл бұрын
Почему нельзя писать в условии цикла p < p + 20 ? это вызывает ошибку при выполнение.
@user-mn3tm2qg6y
@user-mn3tm2qg6y 3 жыл бұрын
Могу предположить, что раз вы с каждой итерацией увеличиваете переменную P, то цикл так-то будет бесконечным, ибо P в условии вашем тоже меняется с каждой итерацией.
@programer8
@programer8 3 жыл бұрын
@@user-mn3tm2qg6y да, это так
@namename2031
@namename2031 2 жыл бұрын
Очень интересно, но ничего не понятно.
@Jashyr
@Jashyr Ай бұрын
и от весеннего бассейна 2024 :)
@7qim
@7qim 2 жыл бұрын
13:50 Надо было смелее и дальше упрощать до _"A + N"_ вместо _"(char *)A + N * sizeof(int *)"_
@LLlblKAPHO
@LLlblKAPHO 11 ай бұрын
интересно, с double это сработает? А то чето сега вылетает, не по глазам где ошибка закралась
@catastrophic3709
@catastrophic3709 6 ай бұрын
Достопочтенный, объясните пожалуйста, для чего мы это пишем, типо память мы выделили, а вот это и последующие для чего?
@7qim
@7qim 6 ай бұрын
@@catastrophic3709 В начале выделенной памяти у нас будут лежать адреса, по которым будут лежать уже сами значения элементов массива (полезные данные), которые, в свою очередь, будут идти сразу после всех этих адресов, поэтому переменная "start" как раз-таки указывает на смещение начала непосредственных значений массива (полезных данных). Далее в цикле распределяем адреса значений для каждого из элементов массива, то есть инициализируем самое начало выделенной памяти.
@catastrophic3709
@catastrophic3709 6 ай бұрын
@@7qim То есть, правил но ли я понял, мы сперва выделяем пямять под массив указателей и элементы массива, далее в переменной "start", мы смещаемся с массива указателей на начальные элементы массива и в цикле мы даём адресс самим элементам?
@7qim
@7qim 6 ай бұрын
@@catastrophic3709 Да.
@tony_slark4757
@tony_slark4757 3 ай бұрын
И снова ученики школы 21 говорят спасибо 😊
@AspireM3400
@AspireM3400 4 жыл бұрын
Ужас как сложно, придется не один раз пересматривать, чтоб уловить суть.
@MrMikhailDJ
@MrMikhailDJ 4 жыл бұрын
всё проще на практике, просто объясняют херово
@user-td4kl8er7g
@user-td4kl8er7g 4 жыл бұрын
@@MrMikhailDJ нее этот дядька объясняет как надо ) когда я учился процесс объяснения был примерно такой "нет времени объяснять дойдём до лаб научитесь"дошли до лаб "вот лабы индивидуальные чтоб не списывали, вон гугл - вперёд" :)
@MrMikhailDJ
@MrMikhailDJ 4 жыл бұрын
Юрий Колесник хз у меня в унике этому вопросу уделалась 1 лекция и 1 семинар. Я считаю что 90 минут теории и 90 минут практики достаточно, чтобы понять. Ну и плюс лаба на которой уже точно всё уясниться
@user-nw2eb6lx1k
@user-nw2eb6lx1k 4 жыл бұрын
@@MrMikhailDJ Везет вам, у нас вообще дают на практике задания на подобии: "Спросить у пользователя число N. Сгенерировать динамический массив размером NхN, заполненный целыми числами подряд.Вычислить сумму элементов (ромбом)." И уходят, ни лекции, ни нормальной практики, как учится... ? Они видимо думают, что мы за первый семестр выучили СИ, но мы проскакали все очень быстро, по 2 темы за пару проходили...
@MrMikhailDJ
@MrMikhailDJ 4 жыл бұрын
@@user-nw2eb6lx1k ну это смотря какой универ. Я учусь в мгту им баумана на РК6, там сапр и очень много проги. Поэтому и уровень такой
@fen-siz
@fen-siz 2 жыл бұрын
почему не int * start = (int *)A + N * sizeof(int *)? для чего нужно (char *)?
@7qim
@7qim 2 жыл бұрын
Чтобы шагать побайтово, а не по 4 байта (это размер int). В действительности можно и нужно это всё упростить до: _int * start = (int *)(A + N);_
@igorbarbashov5155
@igorbarbashov5155 Жыл бұрын
@@7qim только, наверное, последние скобки лишние: надо int *start = (int *)A + N; - вот тогда мы отшагнем N раз по размеру (int *). А в варианте int * start = (int *)(A + N); - мы сначала отшагнем N раз по размеру (int **) - это изначальный тип A, а потом уже итог приведем к (int *). Хотя, возможно, размер (int **) и (int *) гаранитровано одинаковые - этот момент я не знаю...
@AspireM3400
@AspireM3400 4 жыл бұрын
нашел другой пример создания двумерного массива: int *a; // указатель на массив a = (int*)malloc(n*m * sizeof(int)); // n-колличесвто строк, m-столбцов free(a);
@user-mv3fh2bt3z
@user-mv3fh2bt3z 4 жыл бұрын
ты не так освобождаешь память
@nefree
@nefree 4 жыл бұрын
Так это по сути своей одномерный массив, который состоит не из N элементов, а N*M. Для двумерности нужно тогда создать ещё массив указателей, и присоединять каждый указатель после N-го элемента, тогда да - это можно будет назвать двумерным массивом.
@ZStanislav
@ZStanislav 4 жыл бұрын
// Очистка памяти for (i = 0; i < n; i++) // цикл по строкам free(a[i]); // Освобождение памяти для строк матрицы free(a); // Освобождение памяти для массива указателей
@programer8
@programer8 3 жыл бұрын
@@ZStanislav нет, поскольку a это одномерный динамисеский массив интов а не указателей, освобождение памяти: free(a);
@programer8
@programer8 3 жыл бұрын
Сделал чтобы были 4 строки и 5 колонок: void static_array_print2(int A[ ][MATRIX_WIDTH]) { for (int* p = (int*)A, i = 0; p < (int*)A + N; p++, i++) { for (int j = 0; j < MATRIX_WIDTH; j++) printf("%3d", *(p + i * N + j)); printf(" "); } }
@tema_skakun
@tema_skakun 3 жыл бұрын
ошибка на титульном листе урока. название следующего видео
@user-ps2oz5os2g
@user-ps2oz5os2g Жыл бұрын
School 21!
@ImmortalBest
@ImmortalBest 5 жыл бұрын
интересно, Джон Кармак знал про этот читерский способ во времена разработки игрового движка? )
@McGewen
@McGewen 4 жыл бұрын
он на нем написан
@user-mm9zd5uh7o
@user-mm9zd5uh7o 8 ай бұрын
Жаль нельзя второй лайк поставить
@user-ee8sv9pz9x
@user-ee8sv9pz9x 11 ай бұрын
школа 21 летний бассейн 2023 всем привет
@user-nd4sl1lp9b
@user-nd4sl1lp9b 9 ай бұрын
Зачем вообще нужно развивать тему многомерных динамических массивов?Без них можно обойтись если учесть тот факт,что современные компьютеры такие скоросные и мощные,что памяти сполна хватит без экономии(ведь ради этого именно в древние времена развивали эту тему)?
@vasyaputin9628
@vasyaputin9628 6 ай бұрын
статичские массивы на стеке выделяются, а там много не выделишь ) а динамикой в куче
@user-mp7lq3cu9c
@user-mp7lq3cu9c Жыл бұрын
всю серию ждал, когда ты вызовешь calloc (именно С), но чуда не произошло, увы
@diamondapple1648
@diamondapple1648 3 жыл бұрын
Малока
@user-fq7lj9cs8n
@user-fq7lj9cs8n 2 жыл бұрын
Зато в питоне ты такой просто [][]
Техника безопасности при работе с памятью в Си
19:25
Тимофей Хирьянов
Рет қаралды 33 М.
Копирование массива, реверс циклический сдвиг на Си
20:30
Маленькая и средняя фанта
00:56
Multi DO Smile Russian
Рет қаралды 4,9 МЛН
Como ela fez isso? 😲
00:12
Los Wagners
Рет қаралды 23 МЛН
Динамическое программирование сверху и снизу
13:54
Тимофей Хирьянов
Рет қаралды 49 М.
Адреса и указатели в Си. Адресная арифметика
27:47
Тимофей Хирьянов
Рет қаралды 158 М.
Создание и заполение массива на Си
12:35
Тимофей Хирьянов
Рет қаралды 81 М.
Выделение и освобождение динамической памяти в Си
27:39
Индуктивные функции на Си: поиск максимума
23:38
Тимофей Хирьянов
Рет қаралды 24 М.
Оператор if и организация ветвления в Си
15:00
Тимофей Хирьянов
Рет қаралды 41 М.
Передача адреса переменной в функцию в Си
10:44
Тимофей Хирьянов
Рет қаралды 34 М.