Hoo*_*lum 5 c arrays indexing semantics
我知道使用负面索引只是纯粹的运气.但出于好奇,我尝试了这个.我知道你可以声明array [0]; 就像malloc(0); 是合法的.但是为什么我可以在array [0]中存储一个值?
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
int array[0];
array[0] = 5;
printf("%d\n",array[0]);
getch();
}
Run Code Online (Sandbox Code Playgroud)
这样0大小的数组在标准 C 中违反了约束,编译器不应该让您在没有给出诊断信息的情况下逃脱惩罚。如果它没有告诉您一些信息,那么这一定是您的编译器供应商已添加到其 C 方言中的扩展。
不要依赖此类扩展。
无论您是否使用 size 声明数组0,C 都不会强制对数组或指针访问进行边界检查。不过,如果在编译时已知超出范围,一个好的现代编译器仍然应该向您发出警告。