📜  C 中的锯齿状数组或数组数组与示例

📅  最后修改于: 2021-09-03 14:48:28             🧑  作者: Mango

先决条件: 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 
    #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. 使用指针数组(Dynamic Jagged Array)
    • 声明一个指针数组(锯齿状数组),
    • 此数组的大小将是 Jagged 数组中所需的行数
    • 然后,对于数组中的每个指针,为该行中所需的元素数分配内存。

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

    // 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
    

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live