Неровный массив или массив массивов в C с примерами

Опубликовано: 1 Декабря, 2021

Предпосылка: массивы на C

Зубчатый массив - это массив массивов , так что массивы-члены могут быть разных размеров, т. Е. Мы можем создать двумерный массив, но с переменным количеством столбцов в каждой строке. Массивы этого типа также известны как массивы с зубчатыми краями.

Пример:

arr [] [] = {{0, 1, 2},
            {6, 4},
            {1, 7, 6, 8, 9},
            {5} 
          };

Ниже приведены методы реализации зубчатого массива в C:

  1. Использование массива и указателя (статический массив с зазубринами)
    • Сначала объявите одномерные массивы с нужным количеством строк,
    • Размер каждого массива (массива для элементов в строке) будет количеством столбцов (или элементов) в строке,
    • Затем объявите одномерный массив указателей, который будет содержать адреса строк,
    • Размер одномерного массива - это количество строк, которое вы хотите в неровном массиве.

    Ниже представлена реализация описанного выше подхода:
    Пример:

    // 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
    
  2. Использование массива указателя (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.