995877171 发表于 2019-7-17 18:06:32

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

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

{      
int a={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;
   }
       }
}


Krant5 发表于 2019-7-17 19:57:30

你求个最小最大值,你还要用指针把原来的数组给破坏掉?,用指针也不是不可以,你看看你代码,是在操作指针呢还是在操作数组里的内容?

bin554385863 发表于 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 > arr)
            {
                temp = arr;
                arr = arr;
                arr = 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 < key) ? t : key;
      break;
    }
    for (size_t j = size -1; j >= 0; j--)
    {
      value->max = (t > key) ? t : 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);
    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>

---------------------------------------------------------------
想要函数返回多个值,要么用结构体,要么用指针作为参数

bin554385863 发表于 2019-7-17 21:00:12

还有, 兄弟你这明显是指针基础都没过关啊,多学多想多敲代码啊

AmosAlbert 发表于 2019-7-18 13:05:25

min和max可以设置为指针,但你操作的时候出现了问题,如果对数据直接操作了,那还需要指针干嘛?,指针变量,变量指针,指针数组,数组指针,引用。这些概念要高清楚。毕竟C语言的精髓就是指针,不会使用指针就等于没有学C语言

记得采纳哦

AmosAlbert 发表于 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;
maxMin.Min = array;
for (i = 0; i < length; i++) {
if (array >= maxMin.Max)      
   maxMin.Max = array;      //比当前最大值大,修改最大值
if (array <= maxMin.Min)
   maxMin.Min = array;      //比当前最小值小,修改最小值
}
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;
}

AmosAlbert 发表于 2019-7-18 13:12:24

数组名就是首地址,操控指针++来让取得数组向后移动{:10_279:}
页: [1]
查看完整版本: 求大佬解答,在求最大最小数中,为什么min和max不能设置为指针