一个简单的C指针问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:36:56
这个程序是从10个数中找出其中最大值和最小值。大家帮忙看看哪错了。
int max,min;
void mm(int n,int *a)
{
int j;
max=min=*a;
for(j=0;j<n;a++){
if(*a>max)max=*a;
else if(*a<min)min=*a;}
}
main()
{
int a[10]={3,7,9,11,0,6,7,5,4,2};
mm(10,a);
printf("max=%d,min=%d\n",max,min);
}

哪都不是,关键在于你的 循环体
变量j没有自增,等于始终j都是0,死循环了。

问题不在指针上面,全局变量max, min在使用之前没有初始化。它们的值是随机的。所以比较运算(*a>max)和(*a<min)的结果也是随机的。因而你程序的结果也就是随机的。明白?

错误如下:
1、
int max,min; 你定义为全局变量,那么在main函数里面printf("max=%d,min=%d\n",max,min); 输出的是全局变量的值,函数void mm(int n,int *a)执行后并不影响它们原来的值,
2、
for(j=0;j<n;a++)错误,这个能循环吗?应该是for(j=0;j<n;*a++,j++)
而且a++应该为*a++,是数组向下移动。
整程序改为:
void mm(int n,int *a)
{
int max;
int min;
int j;
max=min=*a;
for(j=0;j<n;*a++,j++)
{
if(*a>max)
max=*a;
else if(*a<min)
min=*a;
}
printf("max=%d,min=%d\n",max,min);
}
main()
{
int a[10]={3,7,9,11,0,6,7,5,4,2};
mm(10,a);
}
结果为:
max=11,min=0