最大最小值用指针变量索引求助
我看的老版小甲鱼老师的视频上面有一个用指针变量来求10个数最大最小值,但我做的这个它max_min_value 函数不知道什么地方出了问题,max和min的判断循环不起作用,p到哪,max,min跟到哪,可能是定义指针变量时的问题#include <stdio.h>
int *max, *min;
void max_min_value(int *array, int n);
void main()
{
int i, number;
printf("enter 10 integer numbers:\n");
for(i = 0; i < 10; i++)
{
scanf("%d", &(number));
}
max_min_value(number, 10);
printf("max = %d, min = %d", *max, *min);
}
void max_min_value(int *array, int n)
{
int *p, *array_end;
array_end = array + n;
min = array;
max = array;
for(p = (array+1); p < array_end; p++)
{
if(*p > *max)
{
*max = *p;
}
else if(*p < *min)
{
*min = *p;
}
}
}
这是源代码,望高人指教
指针版的也解决了
直接上代码
#include <stdio.h>
#include <stdlib.h>
int *min = NULL;
int *max = NULL;
void max_min_value(int *array, int n);
void main()
{
int i, number;
printf("enter 10 integer numbers:\n");
for(i = 0; i < 10; i++)
{
scanf("%d", &number);
}
max_min_value(number, 10);
printf("max = %d, min = %d", *max, *min);
system("pause");
}
void max_min_value(int *array, int n)
{
int *p, *array_end;
array_end = array + n;
min = (int *)malloc(1 * sizeof(int));
max = (int *)malloc(1 * sizeof(int));
*max = *array;
*min = *array;
for(p = (array); p < array_end; p++)
{
if(*p > *max)
{
*max = *p;
}
if(*p < *min)
{
*min = *p;
}
}
}
还是解释一下,程序里
int *min = NULL;
min = (int *)malloc(1 * sizeof(int));
*min = *array;
这三句都是必不可少的,对应的步骤是定义全局变量,分配内存空间,赋值
定义时候之所以要指向NULL,就是为了避免出现上面所说的未初始化的指针变量,
分配空间你可以参考更多malloc的资料,这个格式也是常用的一种
还有就是不能把定义变量和分配空间缩减到一起
int *min = (int *)malloc(1 * sizeof(int));
在main函数内部的局部变量可以这样搞,但是对于全局变量(main以外)
初始化时候必须是常量表达式,如果写成这个样子编译器会报一个错误“常量表达式中不允许函数调用”
因为malloc是函数,不是常量表达式
本帖最后由 SHRS23 于 2020-7-24 04:17 编辑
先说比较明显的问题,第一是数组定义的长度不够,第二个读入的地方写错了,第三是min = array;max = array;这里我觉得你的本意应该是把数组的第一个值赋给min和max,但是你这样写实际上是传递的地址,导致在后面每一次对*min赋值,*max也会变化,反过来对*max赋值,*min也变化。
底下的代码是我修改的可以正常运行的代码
#include <stdio.h>
#include <stdlib.h>
int max = INT_MIN;
int min = INT_MAX;
void max_min_value(int *array, int n);
void main()
{
int i, number;
printf("enter 10 integer numbers:\n");
for(i = 0; i < 10; i++)
{
scanf("%d", &number);
}
max_min_value(number, 10);
printf("max = %d, min = %d", max, min);
system("pause");
}
void max_min_value(int *array, int n)
{
int *p, *array_end;
array_end = array + n;
for(p = (array); p < array_end; p++)
{
if(*p > max)
{
max = *p;
}
if(*p < min)
{
min = *p;
}
}
}
说明一下:
首先指针的内容我忘差不多了,试了一下用你的思路把min,max定义成全局指针变量没有成功,所以直接用了普通的int变量
两个常量值
#define INT_MIN (-2147483647 - 1)
#define INT_MAX 2147483647
定义在C语言库文件limits.h
这是找最大最小的常用操作,就是初始时候把最大值设置成极小,最小值设置成极大,保证你想要比较的每一个值都能正常进行判断
还有一点就是你程序开头int *max, *min; 这个写法是错误的,因为指针定义必须初始化,否则就会变成指向内容不确定的指针
写成这样编译是正常但是运行时候会出错
SHRS23 发表于 2020-7-24 04:36
指针版的也解决了
直接上代码
感谢大佬不辞辛苦的解释,终于出结果了,我还没看到 老版视频 的分配内存的malloc的内容{:5_109:}
页:
[1]