为什么指针指针是一个矩阵?

-1 c c++ arrays pointers matrix

我知道在某些情况下,指向指针的指针被描述为矩阵.有人可以解释一下,为什么这种方式有效?哪个C属性允许呢?

请不要发布指针这样的答案指针并不总是矩阵.我知道,但我在问某些情况下为什么它是一个矩阵.

ST3*_*ST3 7

因为操作符[]内联实现.a[b]实际上是*(a + b)

所以第一个[]选择行,第二个选择列.因此,它是arr[m][n]一样stepOne = *(arr + M),其中M = m * nstepTwo = stepOne[n],

这是一样的*(stepOne + n).所以在这个链之后,我们看到arr[m][n]了相同的东西*(arr m*n + n)

要确认什么是真的,您可以查看这个简短的程序

int main()
{
    char arr[10][15];
    std::cout << sizeof(arr) << std::endl;           //150
    std::cout << sizeof(*arr) << std::endl;          //15
    std::cout << sizeof(arr[0]) << std::endl;        //15
    std::cout << sizeof(*arr[0]) << std::endl;       //1
    std::cout << sizeof(**arr) << std::endl;         //1
    std::cout << sizeof(arr[0][0]) << std::endl;     //1

    std::cout << arr << std::endl;                    //some number
    std::cout << arr+1 << std::endl;                  //some number + 15
    std::cout << &arr << std::endl;                   //some number
    std::cout << &arr+1 << std::endl;                 //some number + 150

    return 0;
}



                +---+---+---+---+---+---+---+
This is matrix: | E |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)

我标记了输入字母E.让我们说这是int M[6][7].所以让我们走相反的道路.

  1. &M - 指向矩阵的指针.如果你增加或减少一个你会得到一些其他数据,这是不好的...因为sizeof(M)是相同的sizeof(int) * 7 * 6
  2. &M[0]指向矩阵第一行的指针.如果你增加它,你将进入下一行,因为sizeof(M[0])它等于sizeof(int) * 7.
  3. 所以要获得你需要做的入口指针,&(M[0][0])并且sizeof(M[0][0])等于sizeof(int).

所以要制作一个图表:

           +---+---+---+---+---+---+---+
M[0] ----> | E |   |   |   |   |   |   |
           +---+---+---+---+---+---+---+

                +---+
M[0][0]  ---->  | E |
                +---+
Run Code Online (Sandbox Code Playgroud)

我希望图形帮助,因为我不太擅长解释这些东西......

BTW还有 一件事,指针指针并不总是一个矩阵.