C Multidimensional Arrays

What are Multidimensional Arrays?

A multidimensional array in C is an array of arrays. The most common is the 2D array (matrix), but C supports 3D, 4D, or even higher dimensions.

Declaration Syntax

data_type array_name[size1][size2]...[sizeN];
// Examples
int matrix[3][4];      // 2D: 3 rows, 4 columns
float cube[2][3][4];   // 3D: 2 layers, 3 rows, 4 columns

2D Arrays (Most Common)

Declaration and Initialization

#include <stdio.h>
int main() {
// Method 1: Declare then assign
int matrix1[2][3];
matrix1[0][0] = 1;
matrix1[0][1] = 2;
matrix1[0][2] = 3;
matrix1[1][0] = 4;
matrix1[1][1] = 5;
matrix1[1][2] = 6;
// Method 2: Initialize at declaration
int matrix2[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// Method 3: Row-by-row (braces optional)
int matrix3[2][3] = {1, 2, 3, 4, 5, 6};
// Method 4: Partial initialization (rest become 0)
int matrix4[2][3] = {
{1, 2},
{4}
};
// Result: {{1,2,0}, {4,0,0}}
return 0;
}

Accessing Elements

#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// Access individual element
printf("Element at [1][2]: %d\n", matrix[1][2]);  // 7
// Change value
matrix[0][0] = 99;
printf("Modified: %d\n", matrix[0][0]);  // 99
return 0;
}

Traversing 2D Arrays (Nested Loops)

#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// Print all elements row by row
for(int i = 0; i < 3; i++) {        // Rows
for(int j = 0; j < 4; j++) {    // Columns
printf("%3d ", matrix[i][j]);
}
printf("\n");  // New line after each row
}
return 0;
}

Output:

  1   2   3   4
5   6   7   8
9  10  11  12

Practical Example 1: Matrix Addition

#include <stdio.h>
int main() {
int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
int B[2][3] = {{7, 8, 9}, {10, 11, 12}};
int C[2][3];  // Result matrix
// Add matrices
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}
// Display result
printf("Result of A + B:\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 3; j++) {
printf("%3d ", C[i][j]);
}
printf("\n");
}
return 0;
}

Output:

Result of A + B:
8  10  12
14  16  18

Practical Example 2: Matrix Multiplication

#include <stdio.h>
int main() {
int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
int B[3][2] = {{7, 8}, {9, 10}, {11, 12}};
int C[2][2] = {{0, 0}, {0, 0}};  // Result: 2x2
// Matrix multiplication
for(int i = 0; i < 2; i++) {        // Rows of A
for(int j = 0; j < 2; j++) {    // Columns of B
for(int k = 0; k < 3; k++) { // Columns of A / Rows of B
C[i][j] += A[i][k] * B[k][j];
}
}
}
// Display result
printf("A (2x3) * B (3x2) = C (2x2):\n");
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
printf("%4d ", C[i][j]);
}
printf("\n");
}
return 0;
}

Output:

A (2x3) * B (3x2) = C (2x2):
58   64
139  154

3D Arrays

#include <stdio.h>
int main() {
// 3D array: 2 layers, 3 rows, 4 columns
int cube[2][3][4] = {
{ // Layer 0
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{ // Layer 1
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};
// Access element
printf("Element [1][2][3]: %d\n", cube[1][2][3]);  // 24
// Traverse 3D array
for(int i = 0; i < 2; i++) {        // Layers
printf("Layer %d:\n", i);
for(int j = 0; j < 3; j++) {    // Rows
for(int k = 0; k < 4; k++) { // Columns
printf("%3d ", cube[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}

Output:

Layer 0:
1   2   3   4
5   6   7   8
9  10  11  12
Layer 1:
13  14  15  16
17  18  19  20
21  22  23  24

Omitting Size in Function Parameters

When passing multidimensional arrays to functions, you must specify all dimensions except the first:

#include <stdio.h>
// CORRECT: First dimension can be omitted
void printMatrix(int rows, int cols, int matrix[][3]) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
}
// Also correct using pointer notation
void printMatrix2(int rows, int cols, int (*matrix)[3]) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
}
// WRONG: Cannot omit both dimensions
// void wrong(int matrix[][]) { }  // ERROR!
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
printMatrix(2, 3, matrix);
return 0;
}

Practice Problem: Student Grades

#include <stdio.h>
int main() {
// 3 students, 4 subjects
int grades[3][4] = {
{85, 90, 78, 88},   // Student 0
{92, 88, 95, 89},   // Student 1
{76, 84, 91, 87}    // Student 2
};
// Calculate average for each student
for(int student = 0; student < 3; student++) {
int sum = 0;
for(int subject = 0; subject < 4; subject++) {
sum += grades[student][subject];
}
float avg = sum / 4.0;
printf("Student %d average: %.2f\n", student + 1, avg);
}
// Calculate average for each subject
for(int subject = 0; subject < 4; subject++) {
int sum = 0;
for(int student = 0; student < 3; student++) {
sum += grades[student][subject];
}
float avg = sum / 3.0;
printf("Subject %d average: %.2f\n", subject + 1, avg);
}
return 0;
}

Output:

Student 1 average: 85.25
Student 2 average: 91.00
Student 3 average: 84.50
Subject 1 average: 84.33
Subject 2 average: 87.33
Subject 3 average: 88.00
Subject 4 average: 88.00

Memory Layout (Row-Major Order)

C stores multidimensional arrays in row-major order (row by row in memory):

#include <stdio.h>
int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
// Memory addresses are contiguous
printf("Address of arr[0][0]: %p\n", &arr[0][0]);
printf("Address of arr[0][1]: %p\n", &arr[0][1]);
printf("Address of arr[0][2]: %p\n", &arr[0][2]);
printf("Address of arr[1][0]: %p\n", &arr[1][0]);
// In memory: [1][2][3][4][5][6] sequentially
// Row 0 elements stored first, then row 1
return 0;
}

Quick Reference Table

DimensionDeclarationAccessLoop Nesting
1Dint arr[5]arr[i]1 loop
2Dint arr[3][4]arr[i][j]2 loops
3Dint arr[2][3][4]arr[i][j][k]3 loops
4Dint arr[2][3][4][5]arr[i][j][k][l]4 loops

Common Operations Summary

// Declare a 3x4 matrix
int matrix[3][4];
// Initialize all to zero
int zero[3][4] = {0};
// Get total elements
int total = 3 * 4;  // Use rows * cols
// Copy matrix
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
dest[i][j] = src[i][j];
// Find max element
int max = matrix[0][0];
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
if(matrix[i][j] > max) max = matrix[i][j];

Key Points to Remember

  1. Row-major order - Rows stored contiguously in memory
  2. Index starts at 0 - First element is [0][0]
  3. Size must be known except the first dimension in functions
  4. Use nested loops for traversal
  5. Memory allocation is static (size fixed at compile time)
  6. Partial initialization sets remaining elements to 0

Complete C Programming Guide + Compilers Collection


1. C srand() Function – Understanding Seed Initialization

https://macronepal.com/understanding-the-c-srand-function
Explains how srand() initializes the pseudo-random number generator in C by setting a seed value. Using the same seed produces the same sequence, while time(NULL) gives different results each run.


2. C rand() Function Mechanics and Limitations

https://macronepal.com/c-rand-function-mechanics-and-limitations
Explains how rand() generates pseudo-random numbers between 0 and RAND_MAX, its deterministic nature, and limitations for security use cases.


3. C log() Function

https://macronepal.com/c-log-function-2
Covers natural logarithm calculation using <math.h> and its applications.


4. Mastering Date and Time in C

https://macronepal.com/mastering-date-and-time-in-c
Explains <time.h> functions like time(), clock(), difftime(), and struct tm.


5. Mastering time_t Type in C

https://macronepal.com/mastering-the-c-time_t-type-for-time-management
Explains time representation as seconds since Unix epoch and conversion functions.


6. C exp() Function

https://macronepal.com/c-exp-function-mechanics-and-implementation
Explains exponential function exp(x) and its scientific applications.


7. C log() Function (Alternate Guide)

https://macronepal.com/c-log-function
Comparison of log() and log10() with usage examples.


8. C log10() Function

https://macronepal.com/mastering-the-log10-function-in-c
Explains base-10 logarithm for engineering and scientific applications.


9. C tan() Function

https://macronepal.com/understanding-the-c-tan-function
Explains tangent function and radian-based calculations.


10. Random Numbers in C (Secure vs Predictable)

https://macronepal.com/mastering-c-random-numbers-for-secure-and-predictable-applications
Explains difference between rand() and secure randomness methods.


11. Free Online C Compiler

https://macronepal.com/free-online-c-code-compiler-2
Browser-based compiler for testing C programs instantly.


C Functions, Arguments, Parameters & Flow

Mastering Functions in C – Complete Guide

https://macronepal.com/c/mastering-functions-in-c-a-complete-guide/
Covers function structure, modular programming, and real-world usage.


Function Arguments in C

https://macronepal.com/c-function-arguments/
Explains how arguments are passed and used in function calls.


Function Parameters in C

https://macronepal.com/c-function-parameters/
Explains defining inputs for functions and matching them with arguments.


Function Declarations in C

https://macronepal.com/c-function-declarations-syntax-rules-and-best-practices/
Covers prototypes, syntax rules, and best practices.


Function Calls in C

https://macronepal.com/understanding-function-calls-in-c-syntax-mechanics-and-best-practices/
Explains execution flow and parameter handling during function calls.


Void Functions in C

https://macronepal.com/understanding-void-functions-in-c-syntax-patterns-and-best-practices/
Explains functions that do not return values.


Return Values in C

https://macronepal.com/c-return-values-mechanics-types-and-best-practices/
Explains different return types and how functions return results.


Pass-by-Value in C

https://macronepal.com/aws/understanding-pass-by-value-in-c-mechanics-implications-and-best-practices/
Explains how copies of variables are passed into functions.


Pass-by-Reference in C

https://macronepal.com/c/understanding-pass-by-reference-in-c-pointers-semantics-and-safe-practices/
Explains using pointers to modify original variables.


C strstr() Function

https://macronepal.com/aws/c-strstr-function/
Explains substring search inside strings in C.


C Preprocessor & Macros

https://macronepal.com/mastering-c-variadic-macros-for-flexible-debugging/
https://macronepal.com/mastering-the-stdc-macro-in-c/
https://macronepal.com/c-time-macro-mechanics-and-usage/
https://macronepal.com/understanding-the-c-date-macro/
https://macronepal.com/c-file-type/
https://macronepal.com/mastering-c-line-macro-for-debugging-and-diagnostics/
https://macronepal.com/mastering-predefined-macros-in-c/
https://macronepal.com/c-error-directive-mechanics-and-usage/
https://macronepal.com/understanding-the-c-pragma-directive/
https://macronepal.com/c-include-directive/


C Structures, Memory, Scope & Linkage

https://macronepal.com/mastering-structures-in-c/
https://macronepal.com/c-structure-declaration-mechanics-and-usage/
https://macronepal.com/c-structure-initialization-mechanics-and-best-practices/
https://macronepal.com/mastering-c-structure-member-access-for-reliable-data-handling/
https://macronepal.com/c-nested-structures/
https://macronepal.com/mastering-arrays-of-structures-in-c/
https://macronepal.com/c-structure-pointers-mechanics-and-implementation/
https://macronepal.com/understanding-c-structure-parameter-passing-mechanics/
https://macronepal.com/mastering-c-returning-structures-for-efficient-data-flow/
https://macronepal.com/c-self-referential-structures/
https://macronepal.com/mastering-structure-alignment-in-c/
https://macronepal.com/c-structure-padding-mechanics-and-optimization/
https://macronepal.com/understanding-c-flexible-array-members-mechanics-and-usage/
https://macronepal.com/mastering-c-anonymous-structures-for-flattened-data-layouts/
https://macronepal.com/c-unions/
https://macronepal.com/mastering-c-name-mangling-and-symbol-decoration/
https://macronepal.com/c-no-linkage-mechanics-and-scope-isolation/
https://macronepal.com/understanding-c-internal-linkage-mechanics-and-architecture/


C Scope, Storage Classes & Typedef

https://macronepal.com/mastering-function-prototype-scope-in-c/
https://macronepal.com/c-function-scope-mechanics-and-visibility/
https://macronepal.com/understanding-c-file-scope-mechanics-and-architecture/
https://macronepal.com/mastering-c-scope-rules-for-predictable-name-resolution/
https://macronepal.com/c-scope-rules/
https://macronepal.com/mastering-c-register-storage-class-for-historical-context-and-modern-alternatives/
https://macronepal.com/mastering-_thread_local-in-c/
https://macronepal.com/c-extern-storage-class-mechanics-and-usage/
https://macronepal.com/understanding-the-c-static-storage-class-mechanics-and-usage/
https://macronepal.com/c-auto-storage-class/
https://macronepal.com/c-typedef-with-pointers/


Extra Articles

https://macronepal.com/13757-2/
https://macronepal.com/13748-2/
https://macronepal.com/13747-2/
https://macronepal.com/13746-2/
https://macronepal.com/13745-2/
https://macronepal.com/13708-2/
https://macronepal.com/13707-2/
https://macronepal.com/13702-2/


Online Compilers

https://macronepal.com/free-html-online-code-compiler/
https://macronepal.com/free-online-python-code-compiler/
https://macronepal.com/free-online-python2-code-compiler/
https://macronepal.com/free-online-java-code-compiler/
https://macronepal.com/free-online-javascript-code-compiler/
https://macronepal.com/free-online-node-js-code-compiler/
https://macronepal.com/free-online-c-code-compiler/
https://macronepal.com/free-online-c-code-compiler-2/
https://macronepal.com/free-online-c-code-compiler-3/
https://macronepal.com/free-online-php-code-compiler/
https://macronepal.com/free-online-ruby-code-compiler/
https://macronepal.com/free-online-perl-code-compiler/
https://macronepal.com/free-online-lua-code-compiler/
https://macronepal.com/free-online-tcl-code-compiler/
https://macronepal.com/free-online-groovy-code-compiler/
https://macronepal.com/free-online-j-shell-code-compiler/
https://macronepal.com/free-online-haskell-code-compiler/
https://macronepal.com/free-online-scala-code-compiler/
https://macronepal.com/free-online-common-lisp-code-compiler/
https://macronepal.com/free-online-d-code-compiler/
https://macronepal.com/free-online-ada-code-compiler/
https://macronepal.com/free-erlang-code-compiler/
https://macronepal.com/free-online-assembly-code-compiler/

Complete Guide to Core & Advanced C Programming Concepts (Functions, Strings, Arrays, Loops, I/O, Control Flow)

https://macronepal.com/bash/building-blocks-of-c-a-complete-guide-to-functions/
Explains how functions in C work as reusable blocks of code, including declaration, definition, parameters, return values, and modular programming structure.

https://macronepal.com/bash/the-heart-of-text-processing-a-complete-guide-to-strings-in-c-2/
Explains how strings are handled in C using character arrays, string manipulation techniques, and common library functions for text processing.

https://macronepal.com/bash/the-cornerstone-of-data-organization-a-complete-guide-to-arrays-in-c/
Explains arrays in C as structured memory storage for multiple values, including indexing, initialization, and efficient data organization.

https://macronepal.com/bash/guaranteed-execution-a-complete-guide-to-the-do-while-loop-in-c/
Explains the do-while loop in C, where the loop body executes at least once before checking the condition.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-the-for-loop-in-c/
Explains the for loop in C, including initialization, condition checking, and increment/decrement for controlled iteration.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-while-loops-in-c/
Explains the while loop in C, focusing on condition-based repetition and proper loop control mechanisms.

https://macronepal.com/bash/beyond-if-else-a-complete-guide-to-switch-case-in-c/
Explains switch-case statements in C, enabling multi-branch decision-making based on variable values.

https://macronepal.com/bash/mastering-conditional-logic-a-complete-guide-to-if-else-statements-in-c/
Explains if-else statements in C for decision-making and controlling program flow based on conditions.

https://macronepal.com/bash/mastering-the-fundamentals-a-complete-guide-to-arithmetic-operations-in-c/
Explains arithmetic operations in C such as addition, subtraction, multiplication, division, and operator precedence.

https://macronepal.com/bash/foundation-of-c-programming-a-complete-guide-to-basic-input-output/
Explains basic input and output in C using scanf and printf for interacting with users and displaying results.

Online C Code Compiler
https://macronepal.com/free-online-c-code-compiler-2/

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper