-1

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

请不要发布诸如指向指针并不总是矩阵之类的答案。我知道,但我在问为什么在某些情况下它是一个矩阵。

4

2 回答 2

7

因为运营商[]内联实现。a[b]实际上是*(a + b)

所以第一个[]选择行,第二个选择列。所以它与where和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).

因此,要从所有这些中制作图表:

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

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

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

顺便说一句 ,指向指针的指针并不总是矩阵。

于 2013-07-30T17:37:37.520 回答
0

为什么指针指针是矩阵?

这并非适用于所有情况。

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

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

  1. 它是一个指针数组,
  2. 每个都指向一个元素数组,
  3. 每个元素数组具有相同的大小。

(如果这是关于 C++:根本不要使用指针到指针的语法,而是坚持使用类似这样的一维表示。)

于 2013-07-30T17:48:00.600 回答