Hoo*_*lum 2 c arrays indexing semantics
可能重复:
C中的负数组索引?
为什么这会编译,并按预期运行?我糊涂了.我只是好奇会发生什么,令我惊讶.有效.
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
int array[5];
for(i = -1; i > -6; i--)
array[i] = i*-1;
for(i = -1; i > -6; i--)
printf("%d\n",array[i]);
getch();
}
Run Code Online (Sandbox Code Playgroud)
它很有用,因为你很不走运.它未定义应该发生什么.
array[x]
Run Code Online (Sandbox Code Playgroud)
相当于
*(array+x)
Run Code Online (Sandbox Code Playgroud)
所以你基本上是解除引用x之后位置的指针array.在你的情况下,x是负面的,所以你在数组之前访问内存.它不能保证工作.
它编译的事实是自然的,它是有效的语法,它是一个结构良好的程序.编译器不需要生成任何诊断(但它可能).