我有一个数组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请为运算符使用周围的空间,以便于区分运算符和操作数。