#include
int main()
{
int i;
int temp[5];
for(i=1;i<=5;i++)
{
temp[i]=i;
}
printf("---------");
for(i=1;i<=5;i++)
{
printf("%d",temp[i]);
}
return 0;
}
为什么能正常的给第5个元素赋值,并能输出第5个元素
你越界了,数组下标从0开始,应该是
i=0;i<5
printf("---------");
for(i=0;i<5;i++)
{
printf("%d",temp[i]);
}
return 0;
数组下标从0开始,到size减1结束,到size就多了一个
printf("---------");
for(i=0;i<5;i++)
{
printf("%d",temp[i]);
}
return 0;
就是这个吧
printf("---------");
for(i=1;i<5;i++)
printf("%d ",temp[i]);
printf("%d\n",temp[i]);
return 0;
}
printf("---------");
for(i=0;i<5;i++)
{
printf("%d",temp[i]);
}
return 0;
是从0开始的
数组越界,a[5]的实际存放是a[0]~a[4],a[5]表示数据a有五个元素.
C语言的数组下标由0开始的。
数组越界了。a[5]是指该数组有5个元素,但是存储的下标是从0~4,即数组元素是a[0]~a[4]。
数组越界 不是说非得出错,要看你越界后的操作有什么其他影响没有。越界访问会产生不确定的结果,既然不确定 那就是说有可能没有坏的结果产生,也有可能直接使得程序崩溃
你的临时数组是分配在堆栈里的,[5]访问还是在堆栈内存里,是可读可写的,当然没啥大问题,
顶天可能会对其他堆栈内容破坏,但你这个程序没啥问题,貌似编译器会在临时变量间留空隙的.
但如果你是分配出来的,就存在越界问题了.但编译不会报错,只有realease下才会crash.
int * pn = new int[5]