//===============================================================================
// The 1-dimension
int a[3]
//===============================================================================
the type of size of
expression expression 1 span (in byte)
---------------------------------------------------------------------------------
&a int (*)[3] 3 * sizof(int)
&a[0] int * sizeof(int)
a int * sizeof(int)
a[0] int <N/A>
---------------------------------------------------------------------------------
//===============================================================================
// The 2-demensions
int a[3][2]
//===============================================================================
the type of size of
expression expression 1 span (in byte)
---------------------------------------------------------------------------------
&a int (*)[3][2] 3 * 2 * sizeof(int)
&a[0] int (*)[2] 2 * sizeof(int)
&a[0][0] int * sizeof(int)
//===============================================================================
// The N-dimensions
// Defined a array in type Type, and with multiple dimensions
// Type arr[D(1)][D(2)]...[D(N-1)][D(N)]
// 1 < k < N
//===============================================================================
expression equal to = the type of expression
---------------------------------------------------------------------------------
&arr Type (*)[D(1)]...[D(N)]
&arr[D(1)] Type (*)[D(2)]...[D(N)]
&arr[D(1)]...[D(k)] Type (*)[D(k+1)]...[D(N)]
&arr[D(1)]....[D(N)] Type (*)
arr[D(1)]...[D(k)] &(arr[D(1)]...[D(k)][0]) Type (*)[D(k+2)]...[D(N)]
arr[D(1)]....[D(N)] Type
// The 1-dimension
int a[3]
//===============================================================================
the type of size of
expression expression 1 span (in byte)
---------------------------------------------------------------------------------
&a int (*)[3] 3 * sizof(int)
&a[0] int * sizeof(int)
a int * sizeof(int)
a[0] int <N/A>
---------------------------------------------------------------------------------
//===============================================================================
// The 2-demensions
int a[3][2]
//===============================================================================
the type of size of
expression expression 1 span (in byte)
---------------------------------------------------------------------------------
&a int (*)[3][2] 3 * 2 * sizeof(int)
&a[0] int (*)[2] 2 * sizeof(int)
&a[0][0] int * sizeof(int)
a int (*)[2] 2 * sizeof(int) // a === &(a[0])
a[0] int * sizeof(int) //a[0] === &(a[0][0])a[0][0] int <N/A>
//Conclusion: "a" is equal to "&(a[0])"
//===============================================================================
// The N-dimensions
// Defined a array in type Type, and with multiple dimensions
// Type arr[D(1)][D(2)]...[D(N-1)][D(N)]
// 1 < k < N
//===============================================================================
expression equal to = the type of expression
---------------------------------------------------------------------------------
&arr Type (*)[D(1)]...[D(N)]
&arr[D(1)] Type (*)[D(2)]...[D(N)]
&arr[D(1)]...[D(k)] Type (*)[D(k+1)]...[D(N)]
&arr[D(1)]....[D(N)] Type (*)
arr &(arr[0]) Type (*)[D(2)]...[D(N)]
arr[D(1)]...[D(k)] &(arr[D(1)]...[D(k)][0]) Type (*)[D(k+2)]...[D(N)]
arr[D(1)]....[D(N)] Type
---------------------------------------------------------------------------------
Conclusion: "arr[D(1)]...[D(k)]" (1<k<N) point to the address of first element of itself. is equal to "&(arr[D(1)]...[D(k)][0]"