C语言关于指针
/*一维数组a,求数组内最大的元素值和最小的元素值*/#include <stdio.h>
void main()
{
int a;
int i;
int *p;
void max_min(int *arr, int n);
printf("请输入10个数:");
for(i=0 ; i<10 ; i++)
{
scanf("%d", &a);
}
//max_min(a, 10);
p = &a;
max_min(p, 10);
}
void max_min(int *arr, int n)
{
int *max, *min, *j, *m;
max = min = arr;
j = arr + 1;
m = arr + n;
for( ; j<m ; j++)
{
if(*j > *max)
{
*max = *j;
//max = j;
}
if(*j < *min)
{
*min = *j;
//min = j;
}
}
printf("最大值为%d,最小值为%d\n",*max, *min);
}
在程序判断最大最小值中使用*max = *j和*min = *j为什么最后输出的都是数组的最后一个数?求解...... 本帖最后由 910201513 于 2019-3-21 23:25 编辑
if(*j > *max)
{
*max = *j;
//max = j;
}
if(*j < *min)
{
*min = *j;
//min = j;
}
这两个判断语句在每次for循环中只会有一个执行,不会同时执行
这个max_min(int *arr, int n)函数的通俗讲法就是
先让第一个数既是最小值也是最大值
用将十个数依次赋给*j,每次赋完值,哪这个数和最大最小值比较,比最大值大的话就把这个值给最大值,比最小值小的话就赋给最小值,最后输出最大值最小值
函数max_min(int *arr, int n)不用指针的写法
int main(void)
{
int a = { 4,3,2,1,0,9,8,7,6,5 };
int max, min;
max = a;
min = a;
for (int i = 0; i < 10; i++)
{
if (a > max)
max = a;
else;
if (a < min)
min = a;
else;
}
printf("max=%d min=%d", max, min);
return 0;
} 这代码看了真特么揪心。
先指出1点a;数组传名字就是指针int *p;p = &a;多余中的多余;max_min(p, 10);换成max_min(a, 10);就好。
至于void max_min(int *arr, int n)真的无法直视。能自己写代码是好的,建议还是多参考别人的代码。 本帖最后由 jackz007 于 2019-3-21 23:26 编辑
max = min = arr ; // min , max 均指向数组第 1 个元素
. . . . . .
if(* j > * max) * max = * j ; // 由于 max = min 所以,修改 * max 便等于修改 * min ,同时,改变了数组的第 1 个元素,这应该不是所期望的。
if(* j < * min) * min = * j ; // 由于 min = max 所以,修改 * min 便等于修改 * max ,同时,改变了数组的第 1 个元素,这应该不是所期望的。
正确的做法是,记录指向最大、最小值的指针,而不是记录这个值本身。改成这样才对:
if(* j > * max) max = j ; // 如果 j 指向的元素值大于当前记录在案的最大值,那么就更新、记录这个指针
if(* j < * min) min = j ; // 如果 j 指向的元素值小于当前记录在案的最小值,那么就更新、记录这个指针 int main()
{
int array;
int a = {0};
int b = {0};
for(int i = 0;i < 10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&array);
printf("\n");
}
a = array;
for(int i = 0;i < 10;i++)
{
if(a < array)
{
a = array;
b = i;
}
if(a > array)
{
a = array;
b = i;
}
}
printf("最大的:%d下标:%d\n",a,b);
printf("最小的:%d下标:%d\n",a,b);
return 0;
} jackz007 发表于 2019-3-21 23:20
正确的做法是,记录指向最大、最小值的指针,而不是记录这个值本身。改成这样才对:
嗯嗯,确实修改*max就等于修改*min,这一点我没有想到,谢谢啦 蜜蜂. 发表于 2019-3-22 00:13
int main()
{
int array;
谢谢回复{:5_108:} ba21 发表于 2019-3-21 23:16
这代码看了真特么揪心。
先指出1点a;数组传名字就是指针int *p;p = &a;多余中的多余;max_min(p, 10 ...
额。。。确实是,这已经不止是格式的问题了,谢谢你的建议{:5_106:} 910201513 发表于 2019-3-21 23:15
这两个判断语句在每次for循环中只会有一个执行,不会同时执行
这个max_min(int *arr, int n)函数的通俗 ...
谢谢回复{:5_108:}
页:
[1]