矩阵int 是否与int **相同​​?

简单的一维数组被认为是一个指针,但它也是矩阵的情况?

但是,一个立方体int[5][5][5]也会被认为是一个整体?

不,指向整数的指针与整数数组的数组不同。

想想他们在记忆中的样子。

数组数组(例如int a[2][2] ):

 + --------- + --------- + --------- + --------- +
 |  a [0] [0] |  a [0] [1] |  a [1] [0] |  a [1] [1] |
 + --------- + --------- + --------- + --------- +

指向指针的指针(例如int **a ):

 + ------ + ------ + ------ +
 |  a [0] |  a [1] |  .... |
 + ------ + ------ + ------ +
    |  |
    |  v
    |  + --------- + --------- + --------- +
    |  |  A [1] [0] |  a [1] [1] |  ....... |
    |  + --------- + --------- + --------- +
    v
    + --------- + --------- + --------- +
    |  A [0] [0] |  a [0] [1] |  ....... |
    + --------- + --------- + --------- +

不,他们不是。 例如,考虑下面给出的两个声明。

 int c[5][5][5]; int ***d; 

对于第一个声明,内存要求是125 X 4 = 500字节。

对于第二个声明,内存要求仅为4个字节。 出于许多实际目的,我们可以在数组和指针之间进行交换,但它们并不相同。

显然不是。 整数数组的数组与指向整数的指针的指针不同。 Array是存储在连续内存位置的类似数据元素的集合。 但指向整数的指针不是。

 int a[5][5]; 

在此声明中,它将为所有元素分配连续的内存位置。 说起始内存位置是1000。

 array starting array elements address a[0]--> 1000 --> a[0][0] a[0][1] ... a[0][4] a[1]--> 1020 --> a[1][0] a[1][1] ... a[1][4] a[2]--> 1040 --> a[2][0] a[2][1] ... a[2][4] a[3]--> 1060 --> a[3][0] a[3][1] ... a[3][4] a[4]--> 1080 --> a[4][0] a[4][1] ... a[4][4] 

但是当你有指向整数的指针时,如下所示 –

 int **a; 

当你为此分配记忆时 –

 array --> a[0] a[1] a[2] a[3] a[4] address > 1000 1004 1008 1012 1016 // address of array which points to some other location 

这将分配连续的内存位置。 但是每个数组都会指向/保存元素的其他内存位置。

 array's array element's array elements address address 1000 --> a[0]--> 2000 --> a[0][0] a[0][1] ... a[0][4] 1004 --> a[1]--> 3000 --> a[1][0] a[1][1] ... a[1][4] 1008 --> a[2]--> 4000 --> a[2][0] a[2][1] ... a[2][4] 1012 --> a[3]--> 5000 --> a[3][0] a[3][1] ... a[3][4] 1016 --> a[4]--> 6000 --> a[4][0] a[4][1] ... a[4][4] 

这些数组在不同位置保存其元素的起始地址。