Assign int [] [] int **

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

int a[5];
int * p;

p = a;

Following this approach and considering that I can assign an array to a pointer, why can't I assign a two-dimensional 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 the array is converted to a pointer to its first element, when q = a occurs in the second example, a must be a pointer to [0], and [0] must be a pointer to [0] [0], right?

Also, I am not getting the error message:

cout << **a;

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

+4
source share
4 answers

, int a[5][5]; 25 int.

/, int **q;, int.

, , .

+6

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

, .

a = a11 a12 a13
    a21 a22 a23    

a = a11 a12 a13 a21 a22 a23 
+3

, () , :

int a[5][5];
int (*q)[5]; /* pointer to five-element array of basic type int */

q = a;
q[0][0]; /* equivalent to a[0][0] */

5 - ( ). , , (*q) .

, , , , :

int foo(int a[5][5]) { ... }

:

int foo(int (*a)[5]) { ... }
+1

int a[5];
int * p;

p = a;

In :

T a[5];
T * p;

p = a;

T - .

C/++? , , , .

,

int a[5][5];

T a[5];

T int[5]

T a[5];
T * p;

p = a;

T, , int[5] , p int[5]

int ( *p )[5];

p = a;

int ( * )[5] int ** - .

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

q = p;

T int *, p T *p, , , int **p

+1

All Articles