-2
   int a[2]={1210,15};

    printf("%d",a[33] );

输出

1073828132

a[33]为什么即使数组元素不存在,当我尝试打印时它也不会抛出错误

4

2 回答 2

6

因为C不做边界检查。

您将只是读取调用堆栈中的任意位置。

于 2012-05-03T11:50:54.703 回答
2

C 中的数组只是指针周围的一种语法糖。

int a[2]为 2 个 int 的数组创建空间并初始化。

a[33]实际上*(a + 33)a只是用一个int *指向的第一个元素a。取消引用数组时,C 不关心数组初始化的大小。

于 2012-05-03T11:56:22.190 回答