使用指向数组层的指针遍历数组层

spi*_*ght 7 c arrays pointers

                         |--------|     
//                     / |4  4  4 |     
//                   |--------| 4 | 
//                 / |3  3  3 | 4 | 
//               |---------|3 |   |
//             / | 2  2  2 |3 | /
//            |---------|2 |__|
//            | 1  1  1 |2 | /
//            | 1  1  1 |__| 
//            | 1  1  1 | /
//            |_________|
double arr[4][3][3] = {{1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2},{3,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,4}};
Run Code Online (Sandbox Code Playgroud)

我认为这个数组由4层组成.

我想创建指向数组层的指针,并使用指针遍历该数组的各个层.

我尝试:

double (*pp1)[sizeof(arr[0]) / sizeof(ar[0][0][0])]; 
pp1 = arr[0]; 
Run Code Online (Sandbox Code Playgroud)

并从intelIsense获取错误:类型的值(double(*)(3)不能分配给double(*)(9)

spi*_*ght 0

在尝试解决这个问题时,我得到了一些结果。

我发现以下语句不会引发编译器错误

double arr[4][4][9];
double (*pp3)[9];
pp3 = arr[0];
Run Code Online (Sandbox Code Playgroud)

那么,从上面的代码中推断,只有当指针指向的元素数量等于数组的最小维度时,才可以将指针分配给数组,这是正确的吗?

更新:我认为只能在数组的最小层上创建指针。

有人可以解释一下吗?