为什么基本索引1 C程序工作正常?

时间:2016-10-03 12:41:35

标签: c arrays

这可能是一个天真的问题但是根据我的理解,我知道通过deafult数组的基本索引从零开始。 我不明白的是,为什么以下程序在使用base 1索引时工作正常。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    int i;
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    printf("%d",a[n]);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

  

我不明白的是为什么以下程序正常工作

这只是运气不好。

这是未定义的行为。这意味着编译器不必向您发出警告,也不会发出代码以在运行时检查它。

未定义意味着完全未定义,包括工作似乎在您将其发送给客户之后才会工作,以及更明显的锁定你的机器,格式化所有磁盘并设置你的PSU

答案 1 :(得分:0)

您的代码会编译,但您无法获得预期的结果 数组a的第一个元素将不会被打印,并且在数组末尾将打印一个垃圾值,因为c中没有对数组进行绑定检查。