鱼C论坛

 找回密码
 立即注册
查看: 1350|回复: 7

指针怎样从函数中带回返回值?

[复制链接]
发表于 2015-5-16 18:02:23 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 364904690 于 2015-5-16 18:03 编辑

为什么调用max_min_value函数后,指向最大值的指针b和指向最小值的指针c不能带出返回值呢?
/*****以指针为参数,调用函数,从数组中找出最大值 与最小值  *****/
#include <stdio.h>
int main()
{
        int a[10]={32,85,32,59,96,75,58,98,39,108};
        int *p,*max,*min;
        void  max_min_value(int *t,int *b,int *c);
        p=max=min=a;
        max_min_value(p,max,min);
    printf("max=%d,min=%d\n",*max,*min);
} 


        void  max_min_value(int *t,int *b,int *c)  //查找最大值与最小值
        {
        int i;
        for(i=0;i<10;i++,t++)
        {
                if(*t>*b)
                        b=t;
                if(*t<*c)
                        c=t;
        }
        }

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

使用道具 举报

发表于 2015-5-16 18:41:53 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 小人 于 2015-5-16 18:46 编辑
#include <stdio.h>


void  max_min_value(int t[], int *b, int *c);

int main()
{
        int a[10] = { 32, 85, 32, 59, 96, 75, 58, 98, 39, 108 };
        int max, min;
        max_min_value(a, &max, &min);
        printf("max=%d,min=%d\n", max, min);
        return 0;

}


void  max_min_value(int t[], int *b, int *c)  //查找最大值与最小值
{
        *b = t[0];
        *c = t[0];
        int i = 0;
        for (i = 0; i<10; i++)
        {
                if (t[i]>*b)
                {
                        *b = t[i];
                }
                if (t[i]<*c)
                {
                        *c = t[i];
                }

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

使用道具 举报

发表于 2015-5-16 19:36:40 | 显示全部楼层

回帖奖励 +10 鱼币

既然问题已经解决那我来领个鱼币,顺便说一下,求助提问时采用悬赏方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-17 03:56:32 | 显示全部楼层
还有么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-20 14:22:48 | 显示全部楼层
#include <stdio.h>
int main()
{
         void  max_min_value(int *t,int *b,int *c, int n);
         
     int a[10]={32,85,32,59,96,75,58,98,39,108};
     int max = 0, min = 0;
     
     max_min_value(a, &max, &min, sizeof(a)/4);
     
     printf("max = %d,min = %d\n", max, min);
         
          
        
}

void  max_min_value(int *from,int *max,int *min, int n)  //查找最大值与最小值
{
   int i = 0;
   for (; i<n - 1; i++)
   {
                   if (from[i] <= from[i+1])
                   {
                           *max = from[i+1];
                   }
                   else
                   {
                           *min = from[i];
                   }
   }
}
这段代码可以运行得通,你的*t代表的是数组中的第一个元素,根本没有变化,而且b=t或者c=t改变的是b所指向的变量,而不是改变b所指向变量的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-21 18:38:15 | 显示全部楼层
还可以这样
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>


int _tmain(int argc, _TCHAR* argv[])
{
        /*****以指针为参数,调用函数,从数组中找出最大值 与最小值  *****/
                int a[10] = { 32, 85, 32, 59, 96, 75, 58, 98, 39, 108 };
                int *p, *max, *min;
                p = max = min = a;
                void  max_min_value(int **t, int **b, int **c);
                max_min_value(&p, &max, &min);
                printf("max=%d,min=%d\n", *max, *min);
        getchar();
        return 0;
}

void  max_min_value(int **t, int **b, int **c)  //查找最大值与最小值
{
        int i;
        for (i = 0; i<10; i++, (*t)++)
        {
                if (**t>**b)
                        *b = *t;
                if (**t < **c)
                        *c = *t;
        }
}
这个是函数调用时参数传递的问题,C语言是值传递的方式传参,所以call max_min_value的时候只是将原来的p max min 复制一份成为 t b c 你对 t b c的任何操作都不会改变原来的额 p max min
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-22 08:40:44 | 显示全部楼层
既然问题已经解决那我来领个鱼币,顺便说一下,求助提问时采用悬赏方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-22 22:54:32 | 显示全部楼层
想问一下楼主这是什么字体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 23:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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