数组程序的输出

时间:2015-03-26 20:01:19

标签: c arrays

#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]我无法理解。

2 个答案:

答案 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],程序输出其在循环之前设置的值。

当然你的程序有未定义的行为,因为你正在覆盖数组之外的内存。