Multidimensional Array In C - C Programming Tutorial
C Course / Programs / Multidimensional Array In C

Multidimensional Array In C

BLUF: Understanding Multidimensional Array In C is a foundational part of learning C programming. This tutorial explains the core principles and syntax needed to implement this concept effectively.
Core Programming Principle: Multidimensional Array In C

C provides direct access to memory and system resources. Learn how Multidimensional Array In C leverages this power in the lesson below.

Let's consider a basic example to demonstrate the concept of multidimensional arrays in the C programming language.

Example

//for 2-Dimensional Array

int two_dim[15][25]

//for 3-dimensional Array

int three_dim[15][20][25];

Types of Multidimensional Array

Essentially, in C programming, there exist two distinct varieties of multidimensional arrays. These are:

Here, we will discuss these multidimensional arrays in C systematically.

Two Dimensional (2D) Array in C

In the realm of C programming, a two-dimensional array functions as an array comprising arrays, serving as a storage structure for data presented in a tabular or matrix layout featuring rows and columns. Accessing each element entails utilizing two indices: arrayrow. This construct finds application in displaying information in tabular form, game interfaces, and various grid or matrix representations. The declaration int marks3; initiates an array structured with three rows and four columns.

Since C stores 2D arrays in a row-major fashion, each column of the initial row is contiguous in memory before transitioning to the next row. This arrangement optimizes certain operations, explaining the prevalence of 2D arrays in graphics, scientific, and computational applications.

Syntax of two dimensional Arrays in C

When working with multidimensional arrays in C, it is essential to define both the number of dimensions and the size of each dimension. The typical format for defining a multidimensional array is as demonstrated below:

Example

type array_name[size1][size2]...[sizeN];

Here,

  • Type: It represents the data type of the elements that will be stored in the array.
  • array_name: It represents the name of the array.
  • size1, size2, ..., sizen: It represents the sizes of each dimension of the array.

For instance, the code snippet below initializes a two-dimensional array of integers containing 3 rows and 4 columns:

Example

int my_array[3][4];

It generates a 3x4 array, containing a sum of 12 elements where each element is an integer data type.

Accessing Elements of Multidimensional Arrays

When accessing a specific element within a multidimensional array, it is essential to provide the corresponding indices for each dimension. To illustrate, to retrieve the element located at the second row and third column of the array named my_array, we would utilize the syntax below:

Example

int element = my_array[1][2];

The indexes commence at 0, hence the initial row is accessed using myarray[0], the subsequent row is accessed using myarray[1], and so forth. Likewise, the first element in each row is my_arrayi, and so forth.

Initializing Multidimensional Arrays

We have the option to set up a multidimensional array during its declaration by providing the values for each individual element within the array. As an illustration, the subsequent code initializes a 2D integer array with 2 rows and 3 columns:

Example

int my_array[2][3] = {  

  {1, 2, 3},  

  {4, 5, 6}  

};

It generates a 2x3 array and sets the elements to the provided values during initialization.

Iterating Over Multidimensional Arrays

In the C programming language, we can traverse through the elements of a multidimensional array by employing nested loops. For instance, the code below demonstrates how to iterate over the elements of my_array and display their respective values:

Example

for (int i = 0; i< 2; i++) {  

  for (int j = 0; j < 3; j++) {  

printf("%d ", my_array[i][j]);  

  }  

printf("\n");  

}

This code iterates over every row and column within the array named my_array, displaying each item separated by a space. The printf("\n") function is employed to output a newline character following the completion of each row.

Storage of 2D Arrays

In C programming, 2D arrays are kept in row-major order. It indicates that the first row is kept in memory in its entirety first, then the second row, etc. For instance, the items are kept in memory as follows: 1, 2, 3, 4, 5, 6 in int arr2 = {{1, 2, 3}, {4, 5, 6}};.

  • Every component is kept in a single and continuous block of memory.
  • This design improves the efficiency and cache friendliness of row-wise traversal.
  • Comprehending memory layout facilitates function optimization and pointer arithmetic.
  • Example Usage of Multidimensional Arrays in C

Let's consider an applied instance of utilizing multidimensional arrays in C. Assume we aim to develop a program that manages the scores of 5 students across 4 distinct subjects. To accomplish this, we can employ a 2D array to hold this information, with each row denoting a student, and each column denoting a subject.

Here is a sample code that requests input from the user to enter the grades for individual students and subjects, subsequently computing the average grade for each student and subject:

Example

Example

#include <stdio.h>  

  

int main() {    //main function

  int grades[5][4];  

  

  // Prompt user to enter grades  

for (int i = 0; i< 5; i++) {  

printf("Enter grades for student %d:\n", i+1);  

for (int j = 0; j < 4; j++) {  

printf("Subject %d: ", j+1);  

scanf("%d", &grades[i][j]);  

}  

}  

  

// Calculate average grade for each student  

printf("\nAverage grade for each student:\n");  

for (int i = 0; i< 5; i++) {  

float sum = 0;  

for (int j = 0; j < 4; j++) {  

sum += grades[i][j];  

}  

float avg = sum / 4;  

printf("Student %d: %.2f\n", i+1, avg);  

}  

  

// Calculate average grade for each subject  

printf("\nAverage grade for each subject:\n");  

for (int j = 0; j < 4; j++) {  

float sum = 0;  

for (int i = 0; i< 5; i++) {  

sum += grades[i][j];  

}  

float avg = sum / 5;  

printf("Subject %d: %.2f\n", j+1, avg);  

}  

  

return 0;  

}

Output:

Output

Enter grades for student 1:

Subject 1: 80

Subject 2: 75

Subject 3: 90

Subject 4: 85

Enter grades for student 2:

Subject 1: 70

Subject 2: 85

Subject 3: 80

Subject 4: 75

Enter grades for student 3:

Subject 1: 90

Subject 2: 80

Subject 3: 85

Subject 4: 95

Enter grades for student 4:

Subject 1: 75

Subject 2: 90

Subject 3: 75

Subject 4: 80

Enter grades for student 5:

Subject 1: 85

Subject 2: 70

Subject 3: 80

Subject 4: 90

Average grade for each student:

Student 1: 82.50

Student 2: 77.50

Student 3: 87.50

Student 4: 80.00

Student 5: 81.25

Average grade for each subject:

Subject 1: 80.00

Subject 2: 80.00

Subject 3: 82.00

Subject 4: 85.00

Explanation:

In this instance, grades for five students across four subjects are stored and manipulated through a 2D array named grades5. Initially, input is collected for each student and subject through nested loops. To determine the mean grade for every student, the application adds up the scores for the four subjects, divides the sum by four, and displays the result. Subsequently, the software computes the total scores for all five students, divides this sum by five to ascertain the average score for each subject among all students.

Three Dimensional (3D) Arrays in C

In C programming, a 3D array is essentially an array of 2D arrays that allows for storing data across multiple dimensions: depth, rows, and columns. By declaring it as int cube2[4];, it specifies the presence of two depth layers, each containing a 3x4 matrix. Access to elements within the cube can be achieved using indices for depth, row, and column. Various applications like multi-dimensional data representation, simulations, and image processing (especially for color images) can leverage the advantages offered by 3D arrays.

3D arrays organize data in row-major sequence and progressively store nested arrays. Despite being more challenging to manage, 3D arrays offer greater flexibility compared to 2D arrays when it comes to depicting complex, organized data in practical scenarios.

Declaration of 3D arrays

In C programming, a three-dimensional array can be defined with two layers, each containing three rows and four columns. The overall count of elements in this array amounts to 234 = 24. This array reserves memory space to accommodate all the elements.

Example:

Example

int arr[2][3][4];

Initialization of 3D arrays

To enhance clarity, the array is set up with nested brackets during declaration. Every inner brace represents a row, and these rows collectively form a layer.

Example:

Example

int arr[2][2][3] = {

    {

        {1, 2, 3},

        {4, 5, 6}

    },

    {

        {7, 8, 9},

        {10, 11, 12}

    }

};

Accessing elements in 3D arrays

Items are accessed using three indexes: [depth], [row], and [column]. It can retrieve data from the initial level, the topmost row, and the second column.

Example:

Example

printf("%d", arr[1][0][2]);

Storage of 3D Arrays

In C programming, we have the flexibility to utilize any set of three indexes to set a value, subsequently modifying the data stored at that precise memory location.

Example:

Example

arr[0][1][2] = 50;

Passing 3D arrays to functions

In C programming, when passing a 3D array to a function, all dimensions except the initial one need to be specified. It is crucial for C to have information about the sizes of the last two dimensions to determine the memory layout.

Example:

Example

void display(int arr[2][2][3]) {

    // Access elements inside

}

display(arr);

Three Dimensional Array Example

Let's consider an example to demonstrate the three-dimensional array in C programming.

Example

Example

#include <stdio.h>

// Function to display elements of a 3D array

void displayArray(int arr[2][2][3]) {

    printf("Elements of the 3D array:\n");

    for (int i = 0; i < 2; i++) {           // Depth

        for (int j = 0; j < 2; j++) {       // Rows

            for (int k = 0; k < 3; k++) {   // Columns

                printf("arr[%d][%d][%d] = %d\n", i, j, k, arr[i][j][k]);

            }

        }

    }

}

int main() {   //main function

    // Declaration and Initialization

    int arr[2][2][3] = {

        {

            {1, 2, 3},

            {4, 5, 6}

        },

        {

            {7, 8, 9},

            {10, 11, 12}

        }

    };

    // Access and print a specific element

    printf("Accessing one element: arr[1][0][2] = %d\n", arr[1][0][2]);

    // Modify an element

    arr[0][1][2] = 99;

    // Pass to function to display all elements

    displayArray(arr);

    return 0;

}

Output:

Output

Accessing one element: arr[1][0][2] = 9

Elements of the 3D array:

arr[0][0][0] = 1

arr[0][0][1] = 2

arr[0][0][2] = 3

arr[0][1][0] = 4

arr[0][1][1] = 5

arr[0][1][2] = 99

arr[1][0][0] = 7

arr[1][0][1] = 8

arr[1][0][2] = 9

arr[1][1][0] = 10

arr[1][1][1] = 11

arr[1][1][2] = 12

Explanation:

In this instance, we showcase the implementation of 3-dimensional arrays in the C programming language by constructing a small 2x2x3 grid of integers with predefined test values. Specifically, we intentionally modify a single element, arr0[2], setting it to 99, and promptly showcase the indexing by printing another element, arr1[2]. Subsequently, a supporting function, displayArray, is utilized to iterate through each layer using three nested for loops, displaying every value sequentially. Given that the last two dimensions remain consistent, the function accepts a pointer to the initial row of the 3D array.

Uses and different applications of multidimensional (2D and 3D arrays)

Several usage and applications of multidimensional (2D and 3D) arrays in C are as follows:

  • 2D arrays can effectively perform operations, such as matrix addition, transposition, inversion, subtraction, and multiplication. These processes are essential in fields like mathematical calculations, engineering simulations, and physical modelling.
  • RGB images are represented by 3D arrays, whereas greyscale images are represented by 2D arrays. This framework facilitates geometric changes, filter application, and contrast adjustment.
  • 3D arrays facilitate the simulation and analysis of dynamic natural systems like temperature fields, fluid dynamics, or atmospheric changes by representing components that span three-dimensional space.
  • Chess, tic-tac-toe, sudoku, and similar puzzles are effectively depicted using 2D arrays. In increasingly complex games, 3D arrays can track several levels of the game environment, layers, or statuses.
  • 2D arrays are vital for corporate and academic software applications because they are ideal for storing organized data such as budget sheets, staff attendance records, and report cards.
  • 3D arrays are useful techniques to define multi-level datasets, such as academic records for courses, students, and subjects. It allows for structured access to deeply layered data.
  • 3D arrays are commonly used in CAD tools and graphics engines to store voxel data in 3D spaces, define spatial coordinates, and model objects.
  • Advantages of Multidimensional Arrays

Several advantages of multidimensional array in C are as follows:

  • Structured arrays simplify the representation of real-world scenarios through the organized representation of complex data, which includes matrices, images, and grids from simulations.
  • Accessing Memory in Hierarchical Array form: For time-critical operations like scientific simulations and image processing, data stored in hierarchical formats, such as matrices, images, and grids, is easy to access and iterate through that makes the use of arrays advantageous.
  • Simplifies the representation of multi-layered data: With suitable metrics for indexing, it is easy to encode layered hierarchy data like school structure department → team → employee or class → student → subject diagrams using arrays.
  • Disadvantages of Multidimensional Arrays

Several disadvantages of multidimensional arrays in C are as follows:

  • Memory waste and fixed sizes: In a static array, if the structure is too small or only half populated, memory waste or overflow issues may develop.
  • In C programming, ordinary arrays are less effective than linked lists or dynamic memory approaches when dealing with dynamic or irregular data structures because their size is fixed at compile time and cannot be modified during program execution.
  • Higher-Dimensional Complexity: With complicated nested loops and large-scale systems, multidimensional arrays are more challenging to comprehend, debug, and maintain than two-dimensional arrays.
  • Difference between 2D and 3D arrays in C

Several variances between two-dimensional and three-dimensional arrays in C include:

Feature 2D Array 3D Array
Definition An array of arrays (rows × columns) An array of 2D arrays (depth × rows × cols)
Declaration Syntax int arr[3][4]; int arr[2][3][4];
Dimensions Two dimensions (2 axes) Three dimensions (3 axes)
Visualization Table or matrix Multiple tables/layers stacked
Element Access arr[i][j] arr[i][j][k]
Memory Layout Row-major order It uses row-major memory layout, but deeper nesting.
Common Use Cases Grids, matrices, tables, student marks, etc. 3D models, simulations, RGB image data, etc.
Complexity It is easy to manage It is more complex due to one extra dimension.
Function Parameter Syntax void func(int arr[][4]) void func(int arr[][3][4])

Conclusion

In summary, handling and displaying multidimensional structured data in C involves utilizing 2D and 3D arrays. 2D arrays, with their organized structure and access through rows and columns, are well-suited for managing tabular data like matrices, grids, and academic records. On the other hand, 3D arrays can be beneficial for intricate data arrangements like simulations, stacked matrices, and three-dimensional models.

Both varieties of arrays leverage nested loops to enhance computational, retrieval, and memory functionalities. Proficiency in working with 2D and 3D arrays empowers programmers to design coherent, expandable, and effective engineering and scientific frameworks.

Multidimensional Arrays in C FAQ's

One key difference between 2D arrays and 3D arrays in the C programming language is the number of dimensions they have. While 2D arrays are two-dimensional, with rows and columns, 3D arrays add an additional dimension, forming a structure with rows, columns, and depth.

In C programming, information is stored in a grid format with rows and columns in a 2D array, whereas a 3D array introduces a third dimension to account for depth. Including an additional index does not significantly alter the syntax of three-dimensional arrays.

To define and initialize a three-dimensional array in C, we can follow these steps:

  1. Declare the array with three dimensions, specifying the size for each dimension.
  2. Initialize the array with the values provided in a nested manner, considering all three dimensions.

One technique for defining a three-dimensional array is as illustrated below:

Example

int arr[2][3][4] = { ... };

A line of braces denotes a layer, row, or column.

3) What is the mechanism by which memory is managed for 2D and 3D arrays in C programming?

As C programming organizes 2D and 3D arrays in row-major order, the elements with higher indices on the right side of the memory are iterated through more rapidly. The system ensures that each element is updated sequentially in the correct order.

Yes, it is possible to pass 2D or 3D arrays as arguments to functions in the C programming language.

Yes, it is possible to pass both two-dimensional and three-dimensional arrays as arguments to functions within a C program. Nevertheless, when passing multidimensional arrays, it is essential to define all dimensions except the first within the function's parameter list:

Example

void func(int arr[][3][4]);

5) Which scenarios make use of 2D and 3D arrays?

In C programming, two-dimensional arrays are commonly employed for tables, matrices, and tabular data, while three-dimensional arrays are utilized in scientific computing, image processing, simulations, and layered data modeling.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience