#include<stdio.h>
int main() {
int arr[10] = { 11 , [9] = 22 };
int i;
arr[13] = 2452;
arr[10] = 1212;
for(i = 0; i < 15; i++) {
printf("arr[%i] %i\n " , i, arr[i]);
}
return 0;
}
它产生的输出如下:
arr[0] 11
arr[1] 0
arr[2] 0
arr[3] 0
arr[4] 0
arr[5] 0
arr[6] 0
arr[7] 0
arr[8] 0
arr[9] 22
arr[10] 10
arr[11] -1216806924
arr[12] 0
arr[13] 2452
arr[14] -1218431789
输出arr [10]和arr [13]我无法理解。
答案 0 :(得分:2)
arr [] size为10,因此arr [0]到[9]值有效。其他一切都是rubish,你正在访问内存超出范围
答案 1 :(得分:0)
我会尽力解释。似乎编译器在声明
时按照以下方式将局部变量放在堆栈中int arr[10] = { 11 , [9] = 22 };
int i;
在这种情况下,对象int i
占用与arr + 10
对应的内存(数组的实际元素占用内存,从arr + 0到arr + 9包含)
因此,当您在循环中输出arr[10]
时,实际上您输出的对象i
在此时自然等于10。
首先你将i
设置为1212(arr [10] = 1212;)然后在循环中变量被覆盖i和arr [10 [共享相同的内存。
对于arr [13],程序输出其在循环之前设置的值。
当然你的程序有未定义的行为,因为你正在覆盖数组之外的内存。