fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. // Вывод динамического массива
  7. void print(int** katalog, int stroki, int stolbci) {
  8. cout << "Array of arrays (" << stroki << " x " << stolbci << "):" << endl;
  9. for (int i = 0; i < stroki; i++) {
  10. for (int j = 0; j < stolbci; j++)
  11. cout << setw(3) << katalog[i][j] << " ";
  12. cout << endl;
  13. }
  14. }
  15.  
  16. // Вставка строки
  17. void add_stroki(int**& katalog, int& stroki, int stolbci, int pos) {
  18. katalog = (int**) realloc(katalog, sizeof(int*) * (++stroki));
  19. memmove(katalog + pos + 1, katalog + pos, sizeof(int*) * (stroki - pos));
  20. katalog[pos] = (int*)calloc(stolbci, sizeof(int));
  21. }
  22.  
  23. int main() {
  24. // А теперь сделаем этот список массивов динамическим, его адрес поместим в указатель.
  25. // Указатель на первый элемент массива, в котором элементами являются указатели.
  26. // То есть, указатель на указатель.
  27. int** massiv_massivov; // указатель на int*
  28. int row_count = 5;
  29. int column_count = 10;
  30. // Создаем массив из пяти указателей
  31. // Пять указателей на int, то есть пять int*, пока они ни на что не указывают
  32. massiv_massivov = (int**) malloc(sizeof(int*)*row_count);
  33. // Создадим пять динамических массивов, в каждом по 10 чисел
  34. for (int i = 0; i < row_count; i++) massiv_massivov[i] = (int*) malloc(sizeof(int) * 10);
  35. // работаем как с обычным двумерным массивом 5 x 10
  36. // заполняем
  37. int val = 123;
  38. for (int i = 0; i < row_count; i++) {
  39. for (int j = 0; j < column_count; j++) {
  40. massiv_massivov[i][j] = val;
  41. val++;
  42. }
  43. }
  44. // выводим
  45. print(massiv_massivov, row_count, column_count);
  46. // вставляем в позицию 2, отсчет от нуля
  47. add_stroki(massiv_massivov, row_count, column_count, 2);
  48. print(massiv_massivov, row_count, column_count);
  49. // освобождаем память
  50. // Сначала удаляем 6 массивов, потом удаляем массив, в котором лежали их адреса.
  51. for (int i = 0; i < row_count; i++) free(massiv_massivov[i]);
  52. free(massiv_massivov);
  53. }
Success #stdin #stdout 0s 4232KB
stdin
Standard input is empty
stdout
Array of arrays (5 x 10):
123 124 125 126 127 128 129 130 131 132 
133 134 135 136 137 138 139 140 141 142 
143 144 145 146 147 148 149 150 151 152 
153 154 155 156 157 158 159 160 161 162 
163 164 165 166 167 168 169 170 171 172 
Array of arrays (6 x 10):
123 124 125 126 127 128 129 130 131 132 
133 134 135 136 137 138 139 140 141 142 
  0   0   0   0   0   0   0   0   0   0 
143 144 145 146 147 148 149 150 151 152 
153 154 155 156 157 158 159 160 161 162 
163 164 165 166 167 168 169 170 171 172