这可能是一个天真的问题但是根据我的理解,我知道通过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;
}
答案 0 :(得分:2)
我不明白的是为什么以下程序正常工作
这只是运气不好。
这是未定义的行为。这意味着编译器不必向您发出警告,也不会发出代码以在运行时检查它。
未定义意味着完全未定义,包括工作,似乎在您将其发送给客户之后才会工作,以及更明显的锁定你的机器,格式化所有磁盘并设置你的PSU 。
答案 1 :(得分:0)
您的代码会编译,但您无法获得预期的结果
数组a
的第一个元素将不会被打印,并且在数组末尾将打印一个垃圾值,因为c中没有对数组进行绑定检查。