返回指针的函数,求两个数的最大值,有些不明白为什么这样写不对呢

#include<stdio.h>
void max(int a,int b);
int main()
{
    int a,b;
    void (*p)(int,int);
    p=max;
    *p(a,b);
    return 0;
}
void max(int a,int b)
{
    scanf("%d%d",&a,&b);
    if(a>b) printf("%d",a);
    else printf("%d",b);
}

#include<stdio.h>
void max(int a,int b);
int main()
{
    int a,b;
    void (*p)(int,int);
    p=max; //去掉*
    p(a,b);
    return 0;
}
void max(int a,int b)
{
    scanf("%d%d",&a,&b);
    if(a>b) printf("%d",a);
    else printf("%d",b);
}

 

max函数结束后max函数的形参的内存就会被释放,所以你这样写是不对的应该改成:

void max(int *a,int *b)
{
    scanf("%d%d",a,b);
    if(*a>*b) printf("%d",*a);
    else printf("%d",*b);
}

 

#include<stdio.h>
void max(int *a,int *b);
int main()
{
    int a,b;
    void (*p)(int*,int*);
    p=max;
    *p(&a,&b);
    return 0;
}