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
| Dimension | Declaration | Access | Loop Nesting |
|---|---|---|---|
| 1D | int arr[5] | arr[i] | 1 loop |
| 2D | int arr[3][4] | arr[i][j] | 2 loops |
| 3D | int arr[2][3][4] | arr[i][j][k] | 3 loops |
| 4D | int 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
- Row-major order - Rows stored contiguously in memory
- Index starts at 0 - First element is
[0][0] - Size must be known except the first dimension in functions
- Use nested loops for traversal
- Memory allocation is static (size fixed at compile time)
- 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/
