#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
// Вывод динамического массива
void print(int** katalog, int stroki, int stolbci) {
cout << "Array of arrays (" << stroki << " x " << stolbci << "):" << endl;
for (int i = 0; i < stroki; i++) {
for (int j = 0; j < stolbci; j++)
cout << setw(3) << katalog[i][j] << " ";
cout << endl;
}
}
// Вставка строки
void add_stroki(int**& katalog, int& stroki, int stolbci, int pos) {
katalog = (int**) realloc(katalog, sizeof(int*) * (++stroki));
memmove(katalog + pos + 1, katalog + pos, sizeof(int*) * (stroki - pos));
katalog[pos] = (int*)calloc(stolbci, sizeof(int));
}
int main() {
// А теперь сделаем этот список массивов динамическим, его адрес поместим в указатель.
// Указатель на первый элемент массива, в котором элементами являются указатели.
// То есть, указатель на указатель.
int** massiv_massivov; // указатель на int*
int row_count = 5;
int column_count = 10;
// Создаем массив из пяти указателей
// Пять указателей на int, то есть пять int*, пока они ни на что не указывают
massiv_massivov = (int**) malloc(sizeof(int*)*row_count);
// Создадим пять динамических массивов, в каждом по 10 чисел
for (int i = 0; i < row_count; i++) massiv_massivov[i] = (int*) malloc(sizeof(int) * 10);
// работаем как с обычным двумерным массивом 5 x 10
// заполняем
int val = 123;
for (int i = 0; i < row_count; i++) {
for (int j = 0; j < column_count; j++) {
massiv_massivov[i][j] = val;
val++;
}
}
// выводим
print(massiv_massivov, row_count, column_count);
// вставляем в позицию 2, отсчет от нуля
add_stroki(massiv_massivov, row_count, column_count, 2);
print(massiv_massivov, row_count, column_count);
// освобождаем память
// Сначала удаляем 6 массивов, потом удаляем массив, в котором лежали их адреса.
for (int i = 0; i < row_count; i++) free(massiv_massivov[i]);
free(massiv_massivov);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyDQktGL0LLQvtC0INC00LjQvdCw0LzQuNGH0LXRgdC60L7Qs9C+INC80LDRgdGB0LjQstCwCnZvaWQgcHJpbnQoaW50Kioga2F0YWxvZywgaW50IHN0cm9raSwgaW50IHN0b2xiY2kpIHsKICBjb3V0IDw8ICJBcnJheSBvZiBhcnJheXMgKCIgPDwgc3Ryb2tpIDw8ICIgeCAiIDw8IHN0b2xiY2kgPDwgIik6IiA8PCBlbmRsOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3Ryb2tpOyBpKyspIHsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RvbGJjaTsgaisrKQogICAgICBjb3V0IDw8IHNldHcoMykgPDwga2F0YWxvZ1tpXVtqXSA8PCAiICI7CiAgICBjb3V0IDw8IGVuZGw7CiAgfQp9CgovLyDQktGB0YLQsNCy0LrQsCDRgdGC0YDQvtC60LgKdm9pZCBhZGRfc3Ryb2tpKGludCoqJiBrYXRhbG9nLCBpbnQmIHN0cm9raSwgaW50IHN0b2xiY2ksIGludCBwb3MpIHsKICBrYXRhbG9nID0gKGludCoqKSByZWFsbG9jKGthdGFsb2csIHNpemVvZihpbnQqKSAqICgrK3N0cm9raSkpOwogIG1lbW1vdmUoa2F0YWxvZyArIHBvcyArIDEsIGthdGFsb2cgKyBwb3MsIHNpemVvZihpbnQqKSAqIChzdHJva2kgLSBwb3MpKTsKICBrYXRhbG9nW3Bvc10gPSAoaW50KiljYWxsb2Moc3RvbGJjaSwgc2l6ZW9mKGludCkpOwp9CgppbnQgbWFpbigpIHsKICAvLyDQkCDRgtC10L/QtdGA0Ywg0YHQtNC10LvQsNC10Lwg0Y3RgtC+0YIg0YHQv9C40YHQvtC6INC80LDRgdGB0LjQstC+0LIg0LTQuNC90LDQvNC40YfQtdGB0LrQuNC8LCDQtdCz0L4g0LDQtNGA0LXRgSDQv9C+0LzQtdGB0YLQuNC8INCyINGD0LrQsNC30LDRgtC10LvRjC4KICAvLyDQo9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDQv9C10YDQstGL0Lkg0Y3Qu9C10LzQtdC90YIg0LzQsNGB0YHQuNCy0LAsINCyINC60L7RgtC+0YDQvtC8INGN0LvQtdC80LXQvdGC0LDQvNC4INGP0LLQu9GP0Y7RgtGB0Y8g0YPQutCw0LfQsNGC0LXQu9C4LgogIC8vINCi0L4g0LXRgdGC0YwsINGD0LrQsNC30LDRgtC10LvRjCDQvdCwINGD0LrQsNC30LDRgtC10LvRjC4KICBpbnQqKiBtYXNzaXZfbWFzc2l2b3Y7IC8vINGD0LrQsNC30LDRgtC10LvRjCDQvdCwIGludCoKICBpbnQgcm93X2NvdW50ID0gNTsKICBpbnQgY29sdW1uX2NvdW50ID0gMTA7CiAgLy8g0KHQvtC30LTQsNC10Lwg0LzQsNGB0YHQuNCyINC40Lcg0L/Rj9GC0Lgg0YPQutCw0LfQsNGC0LXQu9C10LkKICAvLyDQn9GP0YLRjCDRg9C60LDQt9Cw0YLQtdC70LXQuSDQvdCwIGludCwg0YLQviDQtdGB0YLRjCDQv9GP0YLRjCBpbnQqLCDQv9C+0LrQsCDQvtC90Lgg0L3QuCDQvdCwINGH0YLQviDQvdC1INGD0LrQsNC30YvQstCw0Y7RggogIG1hc3Npdl9tYXNzaXZvdiA9IChpbnQqKikgbWFsbG9jKHNpemVvZihpbnQqKSpyb3dfY291bnQpOyAgCiAgLy8g0KHQvtC30LTQsNC00LjQvCDQv9GP0YLRjCDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0LzQsNGB0YHQuNCy0L7Qsiwg0LIg0LrQsNC20LTQvtC8INC/0L4gMTAg0YfQuNGB0LXQuwogIGZvciAoaW50IGkgPSAwOyBpIDwgcm93X2NvdW50OyBpKyspIG1hc3Npdl9tYXNzaXZvdltpXSA9IChpbnQqKSBtYWxsb2Moc2l6ZW9mKGludCkgKiAxMCk7CiAgLy8g0YDQsNCx0L7RgtCw0LXQvCDQutCw0Log0YEg0L7QsdGL0YfQvdGL0Lwg0LTQstGD0LzQtdGA0L3Ri9C8INC80LDRgdGB0LjQstC+0LwgNSB4IDEwCiAgLy8g0LfQsNC/0L7Qu9C90Y/QtdC8CiAgaW50IHZhbCA9IDEyMzsKICBmb3IgKGludCBpID0gMDsgaSA8IHJvd19jb3VudDsgaSsrKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvbHVtbl9jb3VudDsgaisrKSB7CiAgICAgIG1hc3Npdl9tYXNzaXZvdltpXVtqXSA9IHZhbDsKICAgICAgdmFsKys7CiAgICB9CiAgfQogIC8vINCy0YvQstC+0LTQuNC8CiAgcHJpbnQobWFzc2l2X21hc3Npdm92LCByb3dfY291bnQsIGNvbHVtbl9jb3VudCk7CiAgLy8g0LLRgdGC0LDQstC70Y/QtdC8INCyINC/0L7Qt9C40YbQuNGOIDIsINC+0YLRgdGH0LXRgiDQvtGCINC90YPQu9GPCiAgYWRkX3N0cm9raShtYXNzaXZfbWFzc2l2b3YsIHJvd19jb3VudCwgY29sdW1uX2NvdW50LCAyKTsKICBwcmludChtYXNzaXZfbWFzc2l2b3YsIHJvd19jb3VudCwgY29sdW1uX2NvdW50KTsKICAvLyDQvtGB0LLQvtCx0L7QttC00LDQtdC8INC/0LDQvNGP0YLRjAogIC8vINCh0L3QsNGH0LDQu9CwINGD0LTQsNC70Y/QtdC8IDYg0LzQsNGB0YHQuNCy0L7Qsiwg0L/QvtGC0L7QvCDRg9C00LDQu9GP0LXQvCDQvNCw0YHRgdC40LIsINCyINC60L7RgtC+0YDQvtC8INC70LXQttCw0LvQuCDQuNGFINCw0LTRgNC10YHQsC4KICBmb3IgKGludCBpID0gMDsgaSA8IHJvd19jb3VudDsgaSsrKSBmcmVlKG1hc3Npdl9tYXNzaXZvdltpXSk7CiAgZnJlZShtYXNzaXZfbWFzc2l2b3YpOwp9