top of page

What is a Dynamic Multi-Dimensional Array?

  • Writer: Siddharth Sharma
    Siddharth Sharma
  • Dec 20, 2024
  • 3 min read

Understanding Dynamic Multi-Dimensional Arrays in C

In C programming, working with arrays is common, but sometimes you need arrays with sizes that are determined at runtime. These are called dynamic arrays. When such arrays have multiple dimensions, they are known as dynamic multi-dimensional arrays. Let’s break down how to create and use them in a simple way.


What is a Dynamic Multi-Dimensional Array?

A multi-dimensional array is an array with more than one dimension, like a 2D matrix or a 3D grid. When the size of the array’s dimensions is determined during program execution, it becomes a dynamic multi-dimensional array.

For example, you might want a 2D array to store rows and columns of data where the number of rows and columns isn’t fixed beforehand. C provides ways to achieve this using pointers and dynamic memory allocation functions.

Creating Dynamic Multi-Dimensional Arrays


Dynamic multi-dimensional arrays can be created in two main ways:

  1. Using Array of Pointers

  2. Using a Single Pointer

Let’s explore both methods step-by-step.


Method 1: Using Array of Pointers

This method treats a 2D array as an array of rows, where each row is a dynamically allocated array.


Steps:

  1. Allocate memory for an array of pointers (rows).

  2. For each row, allocate memory for the columns.


Example:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows, cols;

    printf("Enter number of rows: ");
    scanf("%d", &rows);
    printf("Enter number of columns: ");
    scanf("%d", &cols);

    // Allocate memory for array of pointers
    int** arr = (int**) malloc(rows * sizeof(int*));

    // Allocate memory for each row
    for (int i = 0; i < rows; i++) {
        arr[i] = (int*) malloc(cols * sizeof(int));
    }

    // Input elements
    printf("Enter elements:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            scanf("%d", &arr[i][j]);
        }
    }

    // Print elements
    printf("Matrix:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    // Free allocated memory
    for (int i = 0; i < rows; i++) {
        free(arr[i]);
    }
    free(arr);

    return 0;
}

Method 2: Using a Single Pointer

In this method, you treat the 2D array as a single block of memory and calculate row-column indexing manually.


Steps:

  1. Allocate memory for the entire 2D array as a single block.

  2. Use indexing formulas to access elements.


Example:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows, cols;

    printf("Enter number of rows: ");
    scanf("%d", &rows);
    printf("Enter number of columns: ");
    scanf("%d", &cols);

    // Allocate memory for the 2D array as a single block
    int* arr = (int*) malloc(rows * cols * sizeof(int));

    // Input elements
    printf("Enter elements:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            scanf("%d", &arr[i * cols + j]);
        }
    }

    // Print elements
    printf("Matrix:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i * cols + j]);
        }
        printf("\n");
    }

    // Free allocated memory
    free(arr);

    return 0;
}

Comparing the Two Methods

Feature

Array of Pointers

Single Pointer

Memory allocation

Multiple calls to malloc

Single call to malloc

Accessing elements

arr[i][j]

arr[i * cols + j]

Memory efficiency

Less efficient

More efficient

Complexity

Easier to understand

Requires manual indexing


Important Tips

  • Always check for NULL: Check if memory allocation was successful.

  • Free memory correctly: Use free for each allocated block to avoid memory leaks.

  • Choose the right method: For simplicity, use an array of pointers. For efficiency, use a single pointer.

Conclusion

Dynamic multi-dimensional arrays are useful when you need flexible array sizes in your C programs. By understanding and applying the methods above, you can handle complex data structures efficiently. Practice these examples, and soon you’ll be comfortable using dynamic arrays in your projects. Happy coding!


 
 
 

Comments


bottom of page