c++ - 为什么指向指针的指针是一个矩阵?

标签 c++ c arrays pointers matrix

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

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

最佳答案

因为操作符[]内联实现。 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 - 指向矩阵的指针。如果将其增加或减少 1,您将获得一些其他数据,这很糟糕......因为 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 |
                +---+

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

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

关于c++ - 为什么指向指针的指针是一个矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953681/

相关文章:

C 函数返回后返回不正确的浮点值

javascript - 按值删除数组 - 实时数据

javascript - 将来自文本字段的输入与数组元素进行匹配

c++ - FFMPEG 错误 : Exactly one scaler algorithm must be chosen

c++ - C++ 中 move 时内存中发生了什么

c - C中的随机数生成

c - 损坏的二分搜索和冒泡排序

c++ - 如何为现有代码库创建公共(public) API?

c++ - 将元组转换为模板中的结构

php - 从文件到数组 php