Pointer to 2D array. Why does this example work?
- by Louise
I have this code example, but I don't understand why changing the values in the array inside
outputUsingArray() are changing the original array.
I would have expected changing the values of the array in outputUsingArray() would only be for a local copy of the array.
Why isn't that so?
However, this is the behaviour I would like, but I don't understand why it work.
#include <stdlib.h>
#include <stdio.h>
void outputUsingArray(int array[][4], int n_rows, int n_cols) {
int i, j;
printf("Output Using array\n");
for (i = 0; i < n_rows; i++) {
for (j = 0; j < n_cols; j++) {
// Either can be used.
//printf("%2d ", array[i][j] );
printf("%2d ", *(*(array+i)+j));
}
printf("\n");
}
printf("\n");
array[0][0] = 100;
array[2][3] = 200;
}
void outputUsingPointer(int (*array)[4], int n_rows, int n_cols) {
int i, j;
printf("Output Using Pointer to Array i.e. int (*array)[4]\n");
for (i = 0; i < n_rows; i++) {
for (j = 0; j < n_cols; j++) {
printf("%2d ", *(*(array+i) + j ));
}
printf("\n");
}
printf("\n");
}
int main() {
int array[3][4] = { { 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 10, 11 } };
outputUsingPointer((int (*)[4])array, 3, 4);
outputUsingArray(array, 3, 4);
printf("0,0: %i\n", array[0][0]);
printf("2,3: %i\n", array[2][3]);
return 0;
}