C++ 二维矢量指针算法

C++ 二维矢量指针算法,c++,C++,我试图理解2D向量中的指针算法 我想如果我有大小为:M[3][3]和*ptr=&M[0][0] 比ptr[4]等于M[1][2],但它似乎是错误的 你能帮我解决这个问题吗?M[3][3]在内存中的位置是[0,0][0,1][0,2][1,0][1,1][1,2][2,0][2,1][2,2] 因此,ptr+4将是数组[1,1]的第四个元素,但由于您将其定义为2d数组,因此不能使用1d索引作为速记。2d数组按顺序排列,因此第0行的3列排在第一位,第1行的3列紧随其后,以此类推。您的概念是正确的,但

我试图理解2D向量中的指针算法

我想如果我有大小为:
M[3][3]
*ptr=&M[0][0]
ptr[4]
等于
M[1][2]
,但它似乎是错误的


你能帮我解决这个问题吗?

M[3][3]在内存中的位置是[0,0][0,1][0,2][1,0][1,1][1,2][2,0][2,1][2,2]

因此,ptr+4将是数组[1,1]的第四个元素,但由于您将其定义为2d数组,因此不能使用1d索引作为速记。

2d数组按顺序排列,因此第0行的3列排在第一位,第1行的3列紧随其后,以此类推。您的概念是正确的,但您的计数是关闭的:它是M[1][1]


请注意,您可能会遇到问题,因为这取决于您的代码以及编译器尝试优化的程度。

您是从哪本书/参考资料/网页中了解到ptr[4]是M[1][2]的?所以我们可以建议更好的资源这是标准的库向量吗?就像在
std::vector M(3,std::vector(3))
中一样?或者这只是一个数组
intm[3][3]
你是什么意思?RiChe先生决定你不能,这是C规范的一部分。当你在C++中声明一个2D向量时,它会创建一个指针的一维向量,每个点指向一个单独的地址,所以地址不是按照你使用它的方式排列的。1D@DanF:我刚注意到他说的是向量,不是数组。但是2d向量不是指针向量,而是向量向量。嗯,没错,这使得内存布局更加不同。考虑到问题中的指针语法,我假设他指的是数组