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])。
这个结果是因为这个数组中的数字连续地一行一行地存储在内存中。