我有一个数组A[n][n]为什么我可以这样访问它:*A+i*blockSize*dimenson?那不是翻译成A[i*blockSize*n]吗?

如果i*blockSize*n是大于n的数字怎么办?我以为这行得通,因为C中的2d数组实际上只是一块连续的内存。但是,这并不能改变我无法得到运行时错误就无法编写A[i*blockSize*n][j] = something的事实。

那么为什么*A+i*blockSize*dimenson可以,但是A[i*blockSize*n]

我希望这个问题对C.方面的专家有意义。

最佳答案

那不是翻译成A[i * blockSize * n]


不,这不是您拥有的1

*A + i * blockSize * dimenson


实际上等于

A[0] + i * blockSize * dimension


您需要阅读有关operator precedence的信息,正确的等效表达式是

*(A + i * blockSize * dimenson)


但这不是必需的,因为它会使代码更难阅读,而不会给您带来任何好处。



1请为运算符使用周围的空间,以便于区分运算符和操作数。

10-07 16:44