冒泡法排序,数组下标已经超范围,为何程序运行时不报错
冒泡法排序,数组下标已经超范围,为什么程序运行时不报错?void Sort(int array[10])//定义一个排序函数{int
冒泡法排序,数组下标已经超范围,为什么程序运行时不报错?
void Sort(int array[10])//定义一个排序函数
{
int itemp = 0;//定义一个临时变量
for(int i=0; i<10; i++)//利用冒泡法排序
{
for(int j=0; j<10-i;j++)
{
if (array[j]>array[j+1])//交换数组元素
{
itemp = array[j];
array[j] = array[j+1];
array[j+1] = itemp;
}
}
}
}
当内循环J=9时,不是已经有array[10]了吗?可是我运行程序时为啥不报错呢?
[解决办法]
当以数组为形参传递时,组数会自动退化为指针!从而不包含数组大小,不能对数组做越界检查。
void Sort(int array[10]) 或void Sort(int array[]) 都转化为void Sort(int *array),从而array只能代表数组首元素的地址!
这也是数组与指针的区别之一,面试时有可能被问到!
正确的传递方式,应该为void Sort(int *array, int length)或者void Sort(int (&array)[10]);
直接给出数组大小,或者使用数组引用。
详情可参见http://www.cnblogs.com/CBDoctor/archive/2012/01/11/2318965.html
[解决办法]
这种属于程序逻辑错误,这里对未知内存块进行读写操作,后果难料,是个严重的BUG
[解决办法]
当以数组为形参传递时,组数会自动退化为指针!从而不包含数组大小,不能对数组做越界检查。
[解决办法]++
虽然你函数原型void Sort(int array[10]) ,但是编译器还是会当成一个指针来处理的!