C++ 在内存中计算二维数组
首先,这是一个我不太确定的家庭作业问题。鉴于以下情况:C++ 在内存中计算二维数组,c++,C++,首先,这是一个我不太确定的家庭作业问题。鉴于以下情况: const int TABLES = 10; const int SEATS = 4; Order diningRoom[TABLES][SEATS]; 假设数组diningRoom从内存位置8000开始。如何以字节为单位手动计算元素餐厅[5][2]的地址 A. 8000 + TABLES * 5 + 2 B. 8000 + sizeof(Order * TABLES * 2 + 5) C. 8000 + sizeof(Order) *
const int TABLES = 10;
const int SEATS = 4;
Order diningRoom[TABLES][SEATS];
假设数组diningRoom从内存位置8000开始。如何以字节为单位手动计算元素餐厅[5][2]
的地址
A. 8000 + TABLES * 5 + 2
B. 8000 + sizeof(Order * TABLES * 2 + 5)
C. 8000 + sizeof(Order) * 5 * 2
D. 8000 + sizeof(Order) * (SEATS * 5 + 2)
我想答案是D,但我只是想在提交之前问一下。解决方案A在任何地方都不包含
订单
对象的大小。=>错了
sizeof(订单*表格*2+5)
在解决方案B中没有意义。首先,类
顺序
不能与整数相乘…=>错了 如果C是正确的,
diningRoom[1][2]
和diningRoom[2][1]
位于相同的内存位置。=>错了 所以,它是D.
如果我们想象一个
订餐室[2][4]代码>作为
[0][0] [0][1] [0][2] [0][3]
[1][0] [1][1] [1][2] [1][3]
在内存中是这样的:
[0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3]
现在应该很容易看出为什么D是正确的。
对于元素[x][y],必须跳过x整行,
每行有4个元素(在我的示例中)D是正确答案
数组在内存中是连续排列的,所以您的数组在内存中看起来就像
Order diningRoom[10][4] == Order diningRoom[40]
0) Order | Order | Order | Order
1) Order | Order | Order | Order
2) Order | Order | Order | Order
3) Order | Order | Order | Order
4) Order | Order | Order | Order
5) Order | Order | Order | Order
6) Order | Order | Order | Order
7) Order | Order | Order | Order
8) Order | Order | Order | Order
9) Order | Order | Order | Order
既然你对餐厅[5][2]
感兴趣,你实际上是在要求餐厅[SEATS*5+2]
0) Order | Order | Order | Order
1) Order | Order | Order | Order
2) Order | Order | Order | Order
3) Order | Order | Order | Order
4) Order | Order | Order | Order
5) Order | Order |[Order]| Order
6) Order | Order | Order | Order
7) Order | Order | Order | Order
8) Order | Order | Order | Order
9) Order | Order | Order | Order
与正确的解决方案更相似的答案是C,但这实际上是错误的,因为它没有考虑到,即SEATS*sizeof(Order)