鱼C论坛

 找回密码
 立即注册
查看: 2682|回复: 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;
     }
       }
}


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

  2. /*用结构体存储结果*/
  3. typedef struct
  4. {
  5.     int min;
  6.     int max;
  7. } comp;

  8. /*冒泡排序*/
  9. void sort(int *arr, int size)
  10. {
  11.     int temp;
  12.     for (size_t i = 0; i < size; i++)
  13.     {
  14.         for (size_t j = 0; j < i; j++)
  15.         {
  16.             if (arr[j] > arr[i])
  17.             {
  18.                 temp = arr[j];
  19.                 arr[j] = arr[i];
  20.                 arr[i] = temp;
  21.             }
  22.         }
  23.     }
  24. }

  25. /*定义一个结构体函数同时返回两个结果*/
  26. comp *compare(int *arr, int key, int size, comp *value)
  27. /*key是要比较的那个数,size是数组的长度,value是存储结果的结构体指针*/
  28. {
  29.     int *t = arr;
  30.     for (size_t i = 0; i < size; i++)
  31.     {
  32.         /*三元运算符计算结果*/
  33.         value->min = (t[i] < key) ? t[i] : key;
  34.         break;
  35.     }
  36.     for (size_t j = size -1; j >= 0; j--)
  37.     {
  38.         value->max = (t[j] > key) ? t[j] : key;
  39.         break;
  40.     }
  41.     return value;
  42. }
  43. int main(int argc, char const *argv[])
  44. {
  45.     int a[] = {
  46.         12,
  47.         66,
  48.         88,
  49.         989,
  50.         878,
  51.         66,
  52.         99,
  53.         88,
  54.         99,
  55.         100,
  56.     };
  57.     int s = sizeof(a)/sizeof(a[0]);
  58.     int i;
  59.     comp *result;
  60.     scanf("%d", &i);
  61.     sort(a, s);
  62.     compare(a, i, s, result);
  63.     printf("最小值是: %d\n最大值是: %d", result->min, result->max);
  64.     return 0;
  65. }
复制代码

-----------------------------------------------------------------------------------
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>

---------------------------------------------------------------
想要函数返回多个值,要么用结构体,要么用指针作为参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-17 21:00:12 | 显示全部楼层
还有, 兄弟你这明显是指针基础都没过关啊,多学多想多敲代码啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

记得采纳哦
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:12:24 | 显示全部楼层
数组名就是首地址,操控指针++来让取得数组向后移动
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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