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有人可以解释一下这是怎么回事
答案 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])。
这个结果是因为这个数组中的数字是逐行连续存储在内存中的。