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

最新更新