我正在尝试理解2D向量中的指针算法。
我认为如果我的尺寸为M[3][3]
和*ptr=&M[0][0]
的2D矢量
比ptr[4]
等于M[1][2]
,但似乎是错误的。
你可以帮我解决这个问题吗?
答案 0 :(得分:2)
2D数组排列在Row-major order中,因此第0行的第3列首先出现,然后是第1行的3列,等等。您的概念是正确的,但是您的计数是关闭的:它是M [1 ] [1]
请注意,由于pointer aliasing,您可能会遇到问题,具体取决于您的代码以及编译器尝试优化的程度。
答案 1 :(得分:1)
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索引作为速记。