📜  C中的锯齿状数组或数组数组(带示例)

📅  最后修改于: 2021-05-26 00:22:38             🧑  作者: Mango

先决条件: C语言中的数组

锯齿状数组数组,这样成员数组可以具有不同的大小,即,我们可以创建一个2-D数组,但是每行中的列数是可变的。这些类型的数组也称为锯齿状数组。

例子:

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

以下是在C语言中实现锯齿状数组的方法:

  1. 使用数组和指针(静态锯齿数组)
    • 首先用所需行数声明一维数组,
    • 每个数组(行中元素的数组)的大小将是行中列(或元素)的数量,
    • 然后声明一维指针数组,该数组将保存行的地址,
    • 一维数组的大小是所需的锯齿状数组中的行数。

    下面是上述方法的实现:
    例子:

    // C program to show the
    // implementation of Jagged Arrays
      
    #include 
    #include 
      
    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("\n");
            k++;
      
            // move the pointer to the next row
            jagged[i]++;
        }
      
        return 0;
    }
    
    输出:
    1 2 3 4 
    5 6
    
  2. 使用指针数组(动态锯齿数组)
    • 声明一个指针数组(锯齿数组),
    • 此数组的大小将为锯齿状数组中所需的行数
    • 然后,为数组中的每个指针分配所需的内存,以供您在此行中使用。

    下面是上述方法的实现:
    例子:

    // C program to show the
    // implementation of Jagged Arrays
      
    #include 
    #include 
      
    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("\n");
            k++;
            // move the pointer to the next row
            jagged[i]++;
        }
      
        return 0;
    }
    
    输出:
    100 
    101 102 103
    
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。