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

时间:2013-07-30 17:36:46

标签: c++ c arrays pointers matrix

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

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

2 个答案:

答案 0 :(得分: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 |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+
                |   |   |   |   |   |   |   |
                +---+---+---+---+---+---+---+

我标记了输入字母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)
  4. 所以要制作一张图表:

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

    我希望图表有所帮助,因为我在解释这些内容方面不太好......

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

答案 1 :(得分:0)

  

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

每种情况都不是这样。

指针也可以是指向单个元素的指针,因此“指针指针”也可以是指向单个指针的指针。

指向指针的指针是有效(密集)“矩阵”,如果

  1. 这是一个指针数组,
  2. 每个指向一个元素数组
  3. 每个元素数组具有相同的大小。
  4. (如果这是关于C ++:不要使用指针到指针语法,而是坚持使用类似this的1d表示。)