如何计算 3d 数组中的索引值在内存中的位置?如何计算字符**中的索引值在内存中的位置?
How to calculate where an indexed value in a 3d array will be in memory? How to calculate where an indexed value in a char** will be in memory?
>问题状态:给定以下数组声明和索引访问,计算索引值将位于内存中的地址。假设阵列从 64 位计算机上的位置 200 开始。
a. double d[3][4][4]; d[1][2][3] is at: _________
b. char *n[10]; n[3] is at: _________
我知道答案是416和224(分别(,但我不明白这些数字是如何达到的。
对于a部分,我被告知等式: 3d数组中的地址= 起始地址 + (p * numR * numC + (i * numC( + j( * 类型大小 (其中起始地址 = 200,numR 和 numC 来自原始数组,i、j 和 p 来自您尝试查找的位置(。
我所做的任何事情都不会使这个等式达到 416。我一直在查看数组的顺序为 d[行][列][平面]。这是不正确的吗?我也尝试将其视为 d[plane][row][column],但这似乎也不起作用。
对于 b 部分,我不确定从哪里开始,因为我认为由于数组是一个指针数组,它的位置将在堆中。我不确定如何从中获得 224。
我需要手动回答这些问题,而不是使用代码。
对于此数组声明
double d[3][4][4];
计算表达式的地址
d[1][2][3]
您可以使用以下公式
reinterpret_cast<double *>( d ) + 1 * 16 + 2 * 4 + 3
与 相同(相对于表达式的值(
reinterpret_cast<char *>( d ) + 27 * sizeof( double )
因此,您可以计算地址,例如数组第一个元素的地址加上表达式27 * sizeof( double )
其中 double 等于 8。
对于此阵列
char *n[10];
表达式的地址
n[3]
是
reinterpret_cast<char *>( n ) + 3 * sizeof( char * )
用词来说:
给定大小为S的元素的通用数组 d[s1][s2][s3],d[x][y][z]元素的偏移量为
[(x * s2 * s3) + (y * s3) + z] * S
在数组double d[3][4][4]
中,S = sizeof(double) = 8
,d[1][2][3]
的位置在偏移量:
[(1 * 4 * 4) + (2 * 4) + 3] * 8 = 216
将偏移量 (216( 与起始偏移量 (200( 相加得到 416。
给定一个大小为S的元素的泛型数组 n[s1],n[x]元素的偏移量为
x * S
在数组char * n[10]
中,S = 8
(64 位平台上的指针大小(,n[3]
的位置位于偏移量
3 * 8 = 24
将偏移量 (24( 与起始点 (200( 相加得到 224。
在代码中:
int main()
{
double d[3][4][4];
size_t start = 200;
size_t offset =
sizeof(d[0]) * 1
+ sizeof(d[0][0]) * 2
+ sizeof(d[0][0][0]) * 3;
std::cout << start + offset << std::endl; //416 on my machine
char * n[10];
offset = 3 * sizeof(char*);
std::cout << start + offset << std::endl; //224 on every 64bit platforms
}
- 如何在for循环中包含两个索引值的测试条件
- *无符号字符中的索引值
- 返回向量的单个索引值
- 如何在对向量排序后更改索引值?c++
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 如何计算 3d 数组中的索引值在内存中的位置?如何计算字符**中的索引值在内存中的位置?
- 如何在C++中为数组分配不同的索引值
- C++枚举索引值
- 查找索引值在char表中
- 根据索引值提取特定字节
- 尝试输出所有索引值(如果找到)
- 有没有办法创建一个花哨的迭代器和相应的新数组,以便检查每个索引的索引值的条件?
- 为什么在将单词从文本文件C++到行进行多重映射时获得额外的索引值
- C++使用 min_element 或 max_element 时检索向量中的索引值
- 如何使用二进制索引树来计算小于索引值的元素数量
- 存储数组索引值C++
- 在 for 循环中使用 int 以外的数据类型作为索引值C++
- 向函数传递特定的数组索引值
- C++从迭代器中获取整数形式的索引值
- 将数组中的所有数字更改为其索引值