繁体   English   中英

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

[英]Why with base index 1 C program works fine?

这可能是一个幼稚的问题,但根据我的理解,我知道数组的默认基索引从零开始。 我不明白的是为什么以下程序在使用 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;
}

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

这只是运气不好。

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

未定义意味着完全未定义,这包括工作,并且在您将其运送给客户之前似乎可以工作,以及更明显的锁定您的机器,格式化所有磁盘并点燃您的 PSU

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM