Jagged Array or Array of Arrays in C with Examples (original) (raw)
Last Updated : 11 Dec, 2024
**Prerequisite:
**Jagged array
is
of
such that member arrays can be of different sizes, i.e., we can create a 2-D array but with a variable number of columns in each row. These type of arrays are also known as Jagged arrays.
**Example:
arr[][] = { {0, 1, 2},
{6, 4},
{1, 7, 6, 8, 9},
{5}
};
Below are the methods to implement the jagged array in C:
- **Using **array and a **pointer (**Static Jagged Array)
- First declare 1-D arrays with the number of rows you will need,
- The size of each array (array for the elements in the row) will be the number of columns (or elements) in the row,
- Then declare a 1-D array of pointers that will hold the addresses of the rows,
- The size of the 1-D array is the number of rows you want in the jagged array.
Below is the implementation of the above approach: **Example: 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("\n");
k++;
// move the pointer to the next row
jagged[i]++;
}
return 0;
}
`
2. **Using an **array of pointer (Dynamic Jagged Array)
- Declare an array of pointers (jagged array),
- The size of this array will be the number of rows required in the Jagged array
- Then for each pointer in the array allocate memory for the number of elements you want in this row.
Below is the implementation of the above approach: **Example: C `
// 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("\n");
k++;
}
return 0;
}
`