Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在内存中计算二维数组_C++ - Fatal编程技术网

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)