黑马程序员技术交流社区

标题: 返回指针函数(指针型函数)提问。。求大神 [打印本页]

作者: 475201052    时间: 2014-3-19 23:24
标题: 返回指针函数(指针型函数)提问。。求大神
本帖最后由 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
返回指针的函数和指向函数的指针给我搞晕了,,有啥区别求分析。。。



作者: Hi围城    时间: 2014-3-20 01:28
/*提示输入两个数,并返回两个数中大数的地址*/

#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;
}
// 现在你试试?
作者: 高伟杰    时间: 2014-3-20 02:25
max和main函数中都没有对输入的两个数值进行大小的比较,所以呢,在两个函数中的任意一个中使用if-else来判断选择一下就行了。代码你自己打吧。:)
作者: Freedam    时间: 2014-4-7 18:29
源代码为:
  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都没有在文件中做出定义(这个是不是函数写错了啊)。

作者: 那个Mr_Z    时间: 2014-4-7 21:52
我来简单说一下吧:
1、指向函数的指针
定然形式为:   数据类型 (*指针变量名)(); 例如:int (*p)();  定义P是一个指向函数的指针变量,此函数带回整型的返回值。若写成 int *p(); 它就声明了一个函数,函数的返回值是指向整型变量的指针。在int (*p)();  的定义中,(*p) 和函数名是等价的。
函数指针变量常用的用途之一是把指针作为参数传递到其他函数。
2、返回指针值的函数
定义形式为:类型名      *函数名(参数表列)例如:int *a(int x, int y); a是函数名,调用它以后能得到一个指向整型数据的指针。
作者: blz01003hm    时间: 2014-4-8 12:15
#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:30
本帖最后由 戴文婷 于 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就好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2