因为操作符[]内联实现.a[b]实际上是*(a + b)
所以第一个[]选择行,第二个选择列.因此,它是arr[m][n]一样stepOne = *(arr + M),其中M = m * n和stepTwo = 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 |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
我标记了输入字母E.让我们说这是int M[6][7].所以让我们走相反的道路.
&M - 指向矩阵的指针.如果你增加或减少一个你会得到一些其他数据,这是不好的...因为sizeof(M)是相同的sizeof(int) * 7 * 6&M[0]指向矩阵第一行的指针.如果你增加它,你将进入下一行,因为sizeof(M[0])它等于sizeof(int) * 7.&(M[0][0])并且sizeof(M[0][0])等于sizeof(int).所以要制作一个图表:
           +---+---+---+---+---+---+---+
M[0] ----> | E |   |   |   |   |   |   |
           +---+---+---+---+---+---+---+
                +---+
M[0][0]  ---->  | E |
                +---+
我希望图形帮助,因为我不太擅长解释这些东西......
BTW还有 一件事,指针指针并不总是一个矩阵.
| 归档时间: | 
 | 
| 查看次数: | 338 次 | 
| 最近记录: |