鱼C论坛

 找回密码
 立即注册
查看: 2150|回复: 6

求大佬解答,在求最大最小数中,为什么min和max不能设置为指针

[复制链接]
发表于 2019-7-17 18:06:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void qiudaxiao(int *x,int n );
int *min,*max;
void main()

{      
int a[10]={1,51,31,87,221,5,51,12,5,7},i;

qiudaxiao(a,10);
printf("最大%d,x最小%d\n",*max,*min);

}
void qiudaxiao(int *x,int n )
{
int *i,temp;
    *max=*x;
     *min=*x;
     i=x;
       for(;i<(x+9);i++)
    {
     if(*i>*max)
     {
    *max=*i;
     }
     if(*i<*min)
     {
    *min=*i;
     }
       }
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-17 19:57:30 | 显示全部楼层
你求个最小最大值,你还要用指针把原来的数组给破坏掉?,用指针也不是不可以,你看看你代码,是在操作指针呢还是在操作数组里的内容?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-17 20:41:41 | 显示全部楼层
本帖最后由 bin554385863 于 2019-7-17 20:56 编辑
#include <stdio.h>

/*用结构体存储结果*/
typedef struct
{
    int min;
    int max;
} comp;

/*冒泡排序*/
 void sort(int *arr, int size)
{
    int temp;
    for (size_t i = 0; i < size; i++)
    {
        for (size_t j = 0; j < i; j++)
        {
            if (arr[j] > arr[i])
            {
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
    }
}

/*定义一个结构体函数同时返回两个结果*/
comp *compare(int *arr, int key, int size, comp *value)
/*key是要比较的那个数,size是数组的长度,value是存储结果的结构体指针*/
{
    int *t = arr;
    for (size_t i = 0; i < size; i++)
    {
        /*三元运算符计算结果*/
        value->min = (t[i] < key) ? t[i] : key;
        break;
    }
    for (size_t j = size -1; j >= 0; j--)
    {
        value->max = (t[j] > key) ? t[j] : key;
        break;
    }
    return value;
}
int main(int argc, char const *argv[])
{
    int a[] = {
        12,
        66,
        88,
        989,
        878,
        66,
        99,
        88,
        99,
        100,
    };
    int s = sizeof(a)/sizeof(a[0]);
    int i;
    comp *result;
    scanf("%d", &i);
    sort(a, s);
    compare(a, i, s, result);
    printf("最小值是: %d\n最大值是: %d", result->min, result->max);
    return 0;
}
-----------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.24.0\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-in3wtcx3.uwa --stdout=Microsoft-MIEngine-Out-y5xjaknd.ycg --stderr=Microsoft-MIEngine-Error-3g0wkqaw.i5p --pid=Microsoft-MIEngine-Pid-eic55jkb.rj1 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
42
最小值是: 12
最大值是: 989
E:\Administrator\Documents\My C>

---------------------------------------------------------------
想要函数返回多个值,要么用结构体,要么用指针作为参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-17 21:00:12 | 显示全部楼层
还有, 兄弟你这明显是指针基础都没过关啊,多学多想多敲代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:05:25 | 显示全部楼层
min和max可以设置为指针,但你操作的时候出现了问题,如果对数据直接操作了,那还需要指针干嘛?,指针变量,变量指针,指针数组,数组指针,引用。这些概念要高清楚。毕竟C语言的精髓就是指针,不会使用指针就等于没有学C语言

记得采纳哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:10:44 | 显示全部楼层
#include <stdio.h>
//为了方便返回,使用结构体存储最大值和最小值
typedef struct {
int Max;
int Min;
}MaxMin;      
//函数参数array:数组,length:数组长度。
//这里其实可以把最大值最小值作为指针传进去的。  
MaxMin GetMaxMin(int *array, int length)
{
int i;
MaxMin maxMin;
if (length <= 0)
  return maxMin;
//初始化最大值和最小值为数组第一个数
maxMin.Max = array[0];
maxMin.Min = array[0];
for (i = 0; i < length; i++) {
  if (array[i] >= maxMin.Max)        
   maxMin.Max = array[i];        //比当前最大值大,修改最大值
  if (array[i] <= maxMin.Min)
   maxMin.Min = array[i];        //比当前最小值小,修改最小值
}
return maxMin;
}
//主函数测试
int main() {
int length;
int i;
int *array;
printf("input length of array:");
scanf("%d", &length);
array = (int *)malloc(sizeof(int)*length);
for (i = 0; i < length; i++) {
  printf("input data of array(index %d):", i + 1);
  scanf("%d", array + i);
}
MaxMin maxMin = GetMaxMin(array, length);
printf("Max:%d,Min:%d", maxMin.Max, maxMin.Min);
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:12:24 | 显示全部楼层
数组名就是首地址,操控指针++来让取得数组向后移动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 23:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表