A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 475201052 于 2014-4-10 15:58 编辑

/*提示输入两个数,并返回两个数中大数的地址*/

#include<stdio.h>
int *max(int n1 ,  int n2);   //函数声明
int main()
{
     //提示输入两个数
     int  a ,  b ;
     printf("请输入两个数");
      //接受输入的数字
      scanf('%d , %d' , &a , &b);
      //接下来调用指针型函数
      int * p ;
       p=max( a , b) ;  //调用max。返回大数地址,并赋值给指针变量p
       printf("max = %d\n" , *p);   打印p指向的数据

       return 0;
}

int *max(int n1 , int n2)  // 返回形参最大数的地址(指针)
{
       int *z;
        z = x>y ? &x : &y ;   
        return z;
}

如过输入两个数12,23  
为什么max=12
返回指针的函数和指向函数的指针给我搞晕了,,有啥区别求分析。。。


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
/*提示输入两个数,并返回两个数中大数的地址*/

#include<stdio.h>
int *max(int n1 ,  int n2);
int main()
{
   
    int  a ,  b ;
    printf("请输入两个数");
   
    //scanf('%d , %d' , &a , &b); 双引号写成了单引号
    scanf("%d,%d", &a, &b);
   
    int * p ;
    p=max( a , b) ;
    printf("max = %d\n" , *p);
   
    return 0;
}

int *max(int n1 , int n2)
{
    int *z;
    //z = x>y ? &x : &y ; x,y,的值均无定义
    z = n1>n2 ? &n1 : &n2;
    return z;
}
// 现在你试试?
回复 使用道具 举报
max和main函数中都没有对输入的两个数值进行大小的比较,所以呢,在两个函数中的任意一个中使用if-else来判断选择一下就行了。代码你自己打吧。:)
回复 使用道具 举报
源代码为:
  1. /*提示输入两个数,并返回两个数中大数的地址*/

  2. #include<stdio.h>
  3. int *max(int n1 ,  int n2);   //函数声明
  4. int main()
  5. {
  6.      //提示输入两个数
  7.      int  a ,  b ;
  8.      printf("请输入两个数");
  9.       //接受输入的数字
  10.       scanf('%d , %d' , &a , &b);
  11.       //接下来调用指针型函数
  12.       int * p ;
  13.        p=max( a , b) ;  //调用max。返回大数地址,并赋值给指针变量p
  14.        printf("max = %d\n" , *p);   打印p指向的数据

  15.        return 0;
  16. }

  17. int *max(int n1 , int n2)  // 返回形参最大数的地址(指针)
  18. {
  19.        int *z;
  20.         z = x>y ? &x : &y ;   
  21.         return z;
  22. }
复制代码

代码修改了一下:
  1. #include<stdio.h>

  2. int *max(int n1 ,  int n2);   //函数声明
  3. int main()
  4. {
  5.      //提示输入两个数
  6.      int  a , b ;
  7.      printf("请输入两个数");
  8.       //接受输入的数字
  9.       scanf("%d , %d" , &a , &b);
  10.       //接下来调用指针型函数
  11.       int  p ;
  12.        p=max( a , b) ;  //调用max。返回大数地址,并赋值给指针变量p
  13.        printf("%d %d\n",a,b);
  14.        printf("max = %d\n" , p); //  打印p指向的数据

  15.        return 0;
  16. }

  17. int *max(int n1 , int n2)  // 返回形参最大数的地址(指针)
  18. {
  19.        int z;
  20.         z = n1>n2?n1:n2 ;
  21.         return z;
  22. }
复制代码

主要错误有两个:一个是格式上的错误scanf括号内是' '改为" "(这个是不漏写了);
另一个是思路问题,在原代码中,你的程序编译无法通过,而且在用的方法上存在问题。
首先,原代码中定义一个int *p;p=max(a,b);用指针函数将返回的地址付给指针变量p是可以的。
但是在max的指针函数的编写上变量n1和n2在函数中没有使用,而且变量x,y都没有在文件中做出定义(这个是不是函数写错了啊)。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
我来简单说一下吧:
1、指向函数的指针
定然形式为:   数据类型 (*指针变量名)(); 例如:int (*p)();  定义P是一个指向函数的指针变量,此函数带回整型的返回值。若写成 int *p(); 它就声明了一个函数,函数的返回值是指向整型变量的指针。在int (*p)();  的定义中,(*p) 和函数名是等价的。
函数指针变量常用的用途之一是把指针作为参数传递到其他函数。
2、返回指针值的函数
定义形式为:类型名      *函数名(参数表列)例如:int *a(int x, int y); a是函数名,调用它以后能得到一个指向整型数据的指针。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
#include<stdio.h>
int *max(int *n1,int *n2){
int *p=NULL;
p=(*n1>*n2)?n1:n2;
return p;
}

int main(void){
int a=0,b=0;
int *p=NULL;
printf("请输入两个整数:\n");
scanf("%d %d",&a,&b);
p=max(&a,&b);
printf("max=%d",*p);
return 0;
}
回复 使用道具 举报
本帖最后由 戴文婷 于 2014-4-8 23:31 编辑
  1. #include<stdio.h>
  2. int *max(int n1 ,  int n2);   //函数声明
  3. int main()
  4. {
  5.      //提示输入两个数
  6.      int  a ,  b ;
  7.      printf("请输入两个数");
  8.       //接受输入的数字
  9.       scanf('%d , %d' , &a , &b);
  10.       //接下来调用指针型函数
  11.       int * p ;
  12.        p=max( a , b) ;  //调用max。返回大数地址,并赋值给指针变量p
  13.        printf("max = %d\n" , *p);   打印p指向的数据

  14.        return 0;
  15. }

  16. int *max(int n1 , int n2)  // 返回形参最大数的地址(指针)
  17. {
  18.        int *z;

  19. //x,y 没有定义,所以也没有赋值,我们也就不知道里面的值是什么了。所以C语言读出来的时候也就和我们认为的不一样了。
  20. //但事实是,谁知道C语言从内存读出了些什么。错就很正常啦。LZ把x,y变成函数的形参,n1,n2就好了
  21.         z = x>y ? &x : &y ;   
  22.         return z;
  23. }
复制代码




x,y 没有定义,所以也没有赋值,我们也就不知道里面的值是什么了。所以C语言读出来的时候也就和我们认为的不一样了。
但事实是,谁知道C语言从内存读出了些什么。错就很正常啦。LZ把x,y变成函数的形参,n1,n2就好了

评分

参与人数 1技术分 +2 收起 理由
jing迪 + 2 回答的很详细

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马