告诉我"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。对不起,我的英语不好。我试着写正确,但可能是错误的地方。