gpt4 book ai didi

c++ - 如何计算 3d 数组中的索引值在内存中的位置?如何计算 char** 中的索引值在内存中的位置?

转载 作者:行者123 更新时间:2023-11-28 01:17:10 26 4
gpt4 key购买 nike

问题状态:给定以下数组声明和索引访问,计算索引值在内存中的地址。假设该数组在 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 * )

关于c++ - 如何计算 3d 数组中的索引值在内存中的位置?如何计算 char** 中的索引值在内存中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com