#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,这是正确的。
C 语言在访问数组时不检查索引。如果越界访问数组,则会调用 Undefine Behaviour (UB)。
UB 可能会也可能不会以某种方式表达自己。它可能会出现段错误或工作“正常”。作为一名程序员,您有责任确保正确访问数组。