gpt4 book ai didi

c++ - 指向二维矩阵语法的指针

转载 作者:行者123 更新时间:2023-11-28 03:19:22 27 4
gpt4 key购买 nike

抱歉,但我对 C++ 还是很陌生——接上一个问题 Aliasing vector correctly , (*M)[i][j]*(M[i][j]) 有何不同(其中 M 是指向整数数组的指针指针)?

据我所知,前者似乎等同于 *(*((*MPtr) + i) + j)) 而后者等同于 * (*(*(MPtr + i) + j))(其中 MPtr 是指向 M 的指针)。但是,我不确定 (MPtr + i) 的含义 - 我应该如何解释它?

最佳答案

(M*)(i][j]

这是一个语法错误(实际上是两个)。如果你的意思是

T (*M)[i][j]

相反,这是指向 i x j 类型 T 元素数组的指针的声明。相比之下,

(*M)[i][j]

本身是一个表达式,其中 M 是指向至少二维数组的指针或指向指针的指针。然后,M 被取消引用,结果数组 分别被索引。

类似地,表达式

*(M[i][j])

仅在 M 是指针数组(或任何重载 operator* 的类)时有效,它意味着“取消引用指针,它是 [i][j] 数组 M 的第一个元素。

编辑:索引似乎错误的原因是这样的(假设 M 是一个指向二维数组的指针):

(*M)[i][j] = M[0][i][j]

所以这是数组的第 [i][j] 元素(正如预期的那样)。相比之下,

*(M[i][j]) = M[i][j][0]

M 是仅指向一个数组的指针时,这是错误的(读取过去的数组边界会调用未定义的行为)。

关于c++ - 指向二维矩阵语法的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com