我有一个数组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语言专家来说是有意义的。
答案 0 :(得分:0)
不会转换为
A[i * blockSize * n]
不,它没有 1
*A + i * blockSize * dimenson
实际上相当于
A[0] + i * blockSize * dimension
您需要阅读operator precedence,正确的等效表达式是
*(A + i * blockSize * dimenson)
但这不是必要的,因为它会使代码更难以阅读,而根本不会给你带来任何好处。
1 请为运算符使用周围空格,以便于区分运算符和操作数。
答案 1 :(得分:-1)
首先:
*(A+i*blockSize*dimenson)
转换为:
A[i*blockSize*dimenson]
你根本做不到:
A[i*blockSize*n][j] = something
如果i*blockSize*n
大于n
,因为你将超出你分配的数组的边界,其大小为n乘以n。
但你可以这样做:
A[i][j]
为:
B[i*n+j]
如果将B声明为指向A的一维数组,例如:
int A[n][n];
int * B = (int *)A;