Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

assign int[][] to int** [duplicate]

As far as I know, in some contexts, an array is converted into a pointer to its first element:

int a[5];
int * p;

p = a;

Following this approach and considering I can assign an array to a pointer, why can't I assign a bidimensional array to a pointer to a pointer?

int a[5][5];
int ** q;

q = a;

However, I can assign an array of pointers to a pointer to a pointer:

int * p[5];
int ** q;

q = p;

If an array is converted into a pointer to its first element, when q = a happens in the second example, a should be a pointer to a[0] and a[0] should be a pointer to a[0][0], right?

Besides, I don't get an error if I do:

cout << **a;

Thanks in advance and I hope you can help me to understand.

like image 585
Mark Renton Avatar asked Dec 20 '22 12:12

Mark Renton


2 Answers

The problem is that an array int a[5][5]; stores 25 consecutive int.

A pointer to arrays/pointers like int **q; expects to find an array of consecutive pointers to int.

This is why the assignment you want to do is not possible.

like image 115
Christophe Avatar answered Jan 03 '23 08:01

Christophe


a multi-dimensional array can be assigned to a single pointer

int a[5][5];
int *p = a;

because the memory is allocated as a single block organized by row.

a = a11 a12 a13
    a21 a22 a23    

a = a11 a12 a13 a21 a22 a23 
like image 29
Massimo Costa Avatar answered Jan 03 '23 09:01

Massimo Costa