详细解释使用3D数组的程序输出



告诉我"3 6 1"下面代码的输出是如何生成的?

int main()
{
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
printf("%d %d %d",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]);
return 0;
}

我不明白如何使用a[1]或a[0]访问元素进行减法。因为它是一个3D数组,它应该像[0][1][2]一样被访问。谢谢你。

你可以这样想象:

a[0]和a[1] = 3个元素的2个int (2d数组)(size = 2 * int)

a[0][0]和a[1][0] = 2个元素

a[0][0][0]和a[1][0][0] =实int值,因此它们可以相减(2 - 1 = 1)

如果编译器不能直接减值,则"减结构",即a[1] - a[0] = ((a[1]的begin) - (a[0]的begin))/sizeof(a[0]的elements) = (6 * int)/(2 * int) = 3

之间[1][0]和[0][0]分配6 int,所以[1][0]-[0][0]=((开始[1][0])——(开始[0][0]))/sizeof(元素[0][0])= (6 * int)/(1 * int) = 6

的一些建议:1)使用调试器和反汇编器!我只是看看asm代码,看看它是如何计算的。

2)忘记这么不清楚的方式获得元素之间的元素数量!这是非常糟糕的做法,只是为了愚蠢的考试知识。

p。对不起,我的英语不好。我试着写正确,但可能是错误的地方。

相关内容

  • 没有找到相关文章

最新更新