C
Beginner
1 min read
Arrays and Pointer Arithmetic
Example
#include <stdio.h>
#define ROWS 3
#define COLS 4
void print_matrix(const int mat[][COLS], int rows)
{
for (int r = 0; r < rows; r++) {
for (int c = 0; c < COLS; c++)
printf("%4d", mat[r][c]);
printf("\n");
}
}
int main(void)
{
/* 1D array initialisation */
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
/* Index-based access */
printf("arr[2] = %d\n", arr[2]); /* 30 */
/* Pointer arithmetic — equivalent ways to traverse */
int *p = arr;
for (int i = 0; i < n; i++)
printf("%d ", *(p + i)); /* same as arr[i] */
printf("\n");
/* Pointer walking */
for (int *q = arr; q < arr + n; q++)
printf("%d ", *q);
printf("\n");
/* 2D array */
int mat[ROWS][COLS] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};
print_matrix(mat, ROWS);
/* Flatten 2D to 1D pointer arithmetic */
int *flat = &mat[0][0];
printf("Element [1][2] via flat pointer: %d\n",
flat[1 * COLS + 2]); /* 7 */
return 0;
}