为什么这个C程序不返回错误?

问题描述 投票:0回答:1
#include <stdio.h>
int main() {
    int a[]={1,-2,3,0,-5};
    int i=0;
    while(i++<5){
        a[i]=a[i]>a[i-1]?-1:1;
    }
    for(i=0;i<5;i++) printf("%d",a[i]);
    return 0;
}

我认为它应该返回一个错误,因为 i 超出范围,在增量之前为 4,但在循环中为 5。但它返回 11-1-11,这是正确的。

arrays c while-loop
1个回答
0
投票

C 语言在访问数组时不检查索引。如果越界访问数组,则会调用 Undefine Behaviour (UB)。

UB 可能会也可能不会以某种方式表达自己。它可能会出现段错误或工作“正常”。作为一名程序员,您有责任确保正确访问数组。

© www.soinside.com 2019 - 2024. All rights reserved.