繁体   English   中英

与c中的二维数组输出混淆

[英]confusion with c double dimension array output in c

int arr[3][2]={{1,2},{3,6},{8,6}};
printf("%d %d %d",arr[0][3],arr[1][2],arr[2][0]);

该程序的输出结果为6 8 8有人可以解释一下这是怎么回事

值{{1,2},{3,6},{8,6}}; 存储在连续的存储位置中。

假设这样:

假设arr位置是:100,整数的大小是4

Location 100   : 1

Location 104   : 2

Location 108   : 3

Location 112   : 6

Location 116   : 8

Location 118   : 6

当您访问时

   arr[0][3] =  arr[0] = 100. arr[0][3] = 100 + (3*4) = 112 location Ie: value 6.
   arr[1][2] =  arr[1] = 108. arr[1][2]  = 108 + (2*4 ) = 116 loation Ie: value 8.
   arr[2][0] =  arr[2] = 116. arr[2][0]  = 116 + 0 = 116 location. Ie: value 8.

因此,它被打印为6、8、8。

希望能帮助到你。

您的第二维只有2个项目; 因此,唯一的有效索引是0和1。但是,如果行足够长,C可以宽容(愚蠢?)来计算该元素将在哪里; 因此[0] [3]映射到[1] [1](6),而[1] [2]映射到[2] [0](8)。

a [0]将指向a + 0,即1(a [0] [0]),因此现在从那里加3将导致arr移到6。
现在a [1] [2],a [1]指向'3'(a [1] [0]),因此将其加上2会导致arr指向8。
与a [2] [0]类似,a [2]将指向'8'(a [2] [0])。
结果是因为此数组中的数字逐行连续存储在内存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM