Неровный массив или массив массивов в C с примерами
Опубликовано: 1 Декабря, 2021
Предпосылка: массивы на C
Зубчатый массив - это массив массивов , так что массивы-члены могут быть разных размеров, т. Е. Мы можем создать двумерный массив, но с переменным количеством столбцов в каждой строке. Массивы этого типа также известны как массивы с зубчатыми краями.
Пример:
arr [] [] = {{0, 1, 2}, {6, 4}, {1, 7, 6, 8, 9}, {5} };
Ниже приведены методы реализации зубчатого массива в C:
- Использование массива и указателя (статический массив с зазубринами)
- Сначала объявите одномерные массивы с нужным количеством строк,
- Размер каждого массива (массива для элементов в строке) будет количеством столбцов (или элементов) в строке,
- Затем объявите одномерный массив указателей, который будет содержать адреса строк,
- Размер одномерного массива - это количество строк, которое вы хотите в неровном массиве.
Ниже представлена реализация описанного выше подхода:
Пример:// C program to show the
// implementation of Jagged Arrays
#include <stdio.h>
#include <stdlib.h>
int
main()
{
int
row0[4] = { 1, 2, 3, 4 };
int
row1[2] = { 5, 6 };
int
* jagged[2] = { row0, row1 };
// Array to hold the size of each row
int
Size[2] = { 4, 2 }, k = 0;
// To display elements of Jagged array
for
(
int
i = 0; i < 2; i++) {
// pointer to hold the address of the row
int
* ptr = jagged[i];
for
(
int
j = 0; j < Size[k]; j++) {
printf
(
"%d "
, *ptr);
// move the pointer to the
// next element in the row
ptr++;
}
printf
(
" "
);
k++;
// move the pointer to the next row
jagged[i]++;
}
return
0;
}
Выход:1 2 3 4 5 6
- Использование массива указателя (Dynamic Jagged Array)
- Объявить массив указателей (зубчатый массив),
- Размер этого массива будет количеством строк, необходимых в массиве Jagged.
- Затем для каждого указателя в массиве выделите память на необходимое количество элементов в этой строке.
Ниже представлена реализация описанного выше подхода:
Пример:// C program to show the
// implementation of Jagged Arrays
#include <stdio.h>
#include <stdlib.h>
int
main()
{
// 2 Rows
int
* jagged[2];
// Allocate memory for elements in row 0
jagged[0] =
malloc
(
sizeof
(
int
) * 1);
// Allocate memory for elements in row 1
jagged[1] =
malloc
(
sizeof
(
int
) * 3);
// Array to hold the size of each row
int
Size[2] = { 1, 3 }, k = 0, number = 100;
// User enters the numbers
for
(
int
i = 0; i < 2; i++) {
int
* p = jagged[i];
for
(
int
j = 0; j < Size[k]; j++) {
*p = number++;
// move the pointer
p++;
}
k++;
}
k = 0;
// Display elements in Jagged array
for
(
int
i = 0; i < 2; i++) {
int
* p = jagged[i];
for
(
int
j = 0; j < Size[k]; j++) {
printf
(
"%d "
, *p);
// move the pointer to the next element
p++;
}
printf
(
" "
);
k++;
// move the pointer to the next row
jagged[i]++;
}
return
0;
}
Выход:100 101 102 103
Хотите учиться на лучших видео и практических задачах, ознакомьтесь с Базовым курсом C для базового и продвинутого C.