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

时间:2014-03-12 16:08:20

标签: c arrays

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有人可以解释一下这是怎么回事

3 个答案:

答案 0 :(得分:2)

值{{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。

希望它有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

a [0]将指向+ 0,即1(a [0] [0]),所以现在从那里加3将导致arr移动到6。 现在a [1] [2],a [1]指向'3'(a [1] [0]),因此向它添加2导致arr指向8.
类似于[2] [0],a [2]将指向'8'(a [2] [0])。
这个结果是因为这个数组中的数字是逐行连续存储在内存中的。