int max(int x,int y){ return(x>y?x:y); } int _tmain(int argc, _TCHAR* argv[])

int (*ptr)(int,int); 
int a,b,c; 
ptr=max; 
scanf("%d",&a); 
scanf("%d",&b);
c=(*ptr)(a,b); 
printf("a=%d,b=%d,max=%d",a,b,c); 
system("pause");
}
提示内部编译错误
那儿有问题?

解决方案 »

  1.   

    倒 
    我typedef int (*fun_ptr)(int,int); 然后  fun_ptr ptr; ptr = max; 就正确了
    我想知道原因
      

  2.   

    typedef int (*fun_ptr)(int,int);fun_ptr是函数指针类型,用这个来定义函数指针变量(可以直接理解成int*,只不过是指向一个函数(地址) )fun_ptr ptr;这句就像int* iptr一样,定义(函数指针)变量ptr = max; 这句就是赋值操作撒( 相当于 iptr = &4 这类东东 )
      

  3.   

    typedef 可以不用的。工程环境有关。
      

  4.   

    int max(int x,int y){ return(x>y?x:y); } 
    改成
    int mymax(int x,int y){ return(x>y?x:y); }应该是跟内部定义的宏有冲突
      

  5.   

    我想问的是我的这段代码为什么不行
    int max(int x,int y){ return(x>y?x:y); } int _tmain(int argc, _TCHAR* argv[])

    int (*ptr)(int,int); 
    int a,b,c; 
    ptr=max; 
    scanf("%d",&a); 
    scanf("%d",&b);
    c=(*ptr)(a,b); 
    printf("a=%d,b=%d,max=%d",a,b,c); 
    system("pause");
    }
      

  6.   

    下面的为什么就可以通过?
    typedef int (*fun_ptr)(int,int);
    int max(int x,int y){ return(x>y?x:y); } int _tmain(int argc, _TCHAR* argv[])

    int a,b,c; 
    fun_ptr ptr;
    ptr = max;
    scanf("%d",&a); 
    scanf("%d",&b);
    c=(*ptr)(a,b); 
    printf("a=%d,b=%d,max=%d",a,b,c); 
    system("pause");
    }
      

  7.   

    应该是你的程序有问题!也就是建的工程有问题(代码没有问题)
    要不你如下吧:
    #include <stdio.h>
    int max(int x,int y){return(x>y?x:y);}int main(int argc,int *argv[])
    {
    int (*ptr)(int,int);
    int a,b,c;
    ptr = max;
    scanf("%d",&a);
    scanf("%d",&b);
    c=(*ptr)(a,b);
    printf("a = %d,b=%d,max=%d",a,b,c);
    return 0;
    }
      

  8.   

    我调用以上的代码,完全没有问题,我的代码如下:int max(int x, int y)
    {
        return x > y ? x : y;
    }int _tmain(int argc, _TCHAR* argv[])
    {
        int a = 0;
        int b = 0;    int (*FunPtr)(int, int);
        FunPtr = max;    _tscanf(_T("%d, %d"), &a, &b);
        getchar();    _tprintf(_T("a=%d, b=%d, max=%d"), a, b, FunPtr(a, b));
        getchar();
    return 0;
    }