主题:用指针求数组最值出错,为什么呢?
ray988
[专家分:0] 发布于 2010-04-19 17:24:00
代码如下: 用指针求一个一维数组的最大值及最小值
#include<stdio.h>
int main()
{
int *max,*min,i;
int a[]={23, 90, 9, 25, 16};
max=&a[0];
min=&a[0];
for(i=1;i<5;i++)
{
if(*max < *(max+i))
max=(max+i);
else if(*min > *(min+i))
min=(min+i);
}
printf("%d %d\n",*max,*min);
return 0;
}
回复列表 (共5个回复)
沙发
keyall [专家分:0] 发布于 2010-04-19 17:36:00
我知道了,自己把 max的指针给修改,导致数组溢出出错。
我这还用另外一种方法做也出问题了,求解?
代码如下:
#include <stdio.h>
int main(void)
{
int j, arr[]={23, 90, 9, 25, 16};
int min, max;
min = max = 0;
for ( j = 0; j < 5; j++)
{
if(arr[min] > arr[j] )
min = j;
if(arr[max] < arr[j])
max = j;
}
printf("the min arr is %d\n", min);
printf("the max arr is %d\n", max);
return 0;
}
板凳
雪光风剑 [专家分:27190] 发布于 2010-04-19 19:15:00
1楼程序没发现明显错误啊……
3 楼
耶路撒冷 [专家分:650] 发布于 2010-04-19 22:12:00
i<4,因为当i==4时,如果你i<5的话,你循环里面有一个max+1会越界
4 楼
雪光风剑 [专家分:27190] 发布于 2010-04-19 22:41:00
[quote]i<4,因为当i==4时,如果你i<5的话,你循环里面有一个max+1会越界
[/quote]
人家主楼的程序自己已经发现问题了好不……
5 楼
ray988 [专家分:0] 发布于 2010-04-19 23:23:00
[quote]i<4,因为当i==4时,如果你i<5的话,你循环里面有一个max+1会越界
[/quote]
谢谢了
我来回复