user-0 提问: 本人新手，求大神看下这个指针变量指向函数出现什么问题

回复:
user: user-1
content: 是函数指针数组吗

user: user-1
content: #include <stdio.h> int max(int x,int y) {         int z;         if(x>y)                 z=x;         else                 z=y;         return(z); } int min(int x,int y) {         int z;         if(x>y)                 z=y;         else                 z=x;         return(z); } int add(int x,int y) {         int z;         z=x+y;         return (z); } void process(int x,int y,int (*fun)()) {         int result;         result=(*fun)(x,y);         printf("%d\n",result); } int main() {         int max(int, int );         int min(int ,int );         int add(int ,int );         int a,b;         printf("enter a and b:");         scanf("%d",&a);         scanf("%d",&b);         printf("max=");         process(a,b,max);         printf("min=");         process(a,b,min);         printf("add=");         process(a,b,add);         return 0; }  不要这么用scanf函数，不要把scanf函数想的太简单，不然会给你带来一大堆问题的

user: user-2
content: 这编译器会给过？

user: user-3
content: VC++6.0确实是过的

user: user-4
content: 引用 1 楼 xiaoyinghao999 的回复:代码的问题： 1、每一个函数都没有返回值 2、函数的地址就是指针，process(a,b,max);第三个参数传入的就是一个函数的地址（指针） 3、定义一个函数指针的方法：int （*fun）（int，int）-->这个的意思就是（1）fun是一个函数指针，它指向一个参数是两个int型变量，返回值是int型变量的函数  所以阁下的代码应该是如下的样子： #include <stdio.h> int max(int x,int y) {     int z;     if(x>y)             z=x;     else              z=y;     return(z); } int min(int x,int y) {     int z;     if(x>y)             z=y;     else              z=x;     return(z); } int add(int x,int y) {     int z;     z=x+y;     return (z); } void process(int x,int y,int (*fun)(int, int)) {     int result;     result=fun(x,y);     printf("%d\n",result); } int main() {     //int max(),min(),add()     int a,b;     printf("enter a and b:");     scanf("%d,%d",&a,&b);     printf("max=");     process(a,b,max);     printf("min=");     process(a,b,min);     printf("add=");     process(a,b,add);  	return 0; }+1

user: user-5
content: 仅供参考#include <stdio.h> double A[300][100]; double valuex[300]; double valuey[300]; int i; double fun00(double x,double y) {return x  +   y  ;}; double fun01(double x,double y) {return x*x+ 3*y  ;}; double fun02(double x,double y) {return x  + 2*y*x;}; //...  fun03(double x,double y) {return ...+...   ;}; //... //...  fun98(double x,double y) {return ...+...   ;}; double fun99(double x,double y) {return x/2+20*y  ;}; double (*funNN[100])(double,double)={     fun00,     fun01,     fun02, //  fun03, //  ... //  fun98,     fun99, }; int main() {     double x,y;     int f,FN;      for (i=0;i<300;i++) {         valuex[i]=(double)i;         valuey[i]=(double)i;     }     FN=3;     for (i=0;i<300;i++) {          x=valuex[i];          y=valuey[i];          for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);     }     for (i=0;i<3;i++) {         for (f=0;f<FN;f++) printf("%lg ",A[i][f]);         printf("\n");     }     return 0; } //0 0 0 //2 4 3 //4 10 10

user: user-6
content: 1 楼 正 解

user: user-3
content: 代码的问题： 1、每一个函数都没有返回值 2、函数的地址就是指针，process(a,b,max);第三个参数传入的就是一个函数的地址（指针） 3、定义一个函数指针的方法：int （*fun）（int，int）-->这个的意思就是（1）fun是一个函数指针，它指向一个参数是两个int型变量，返回值是int型变量的函数  所以阁下的代码应该是如下的样子： #include <stdio.h> int max(int x,int y) {     int z;     if(x>y)             z=x;     else              z=y;     return(z); } int min(int x,int y) {     int z;     if(x>y)             z=y;     else              z=x;     return(z); } int add(int x,int y) {     int z;     z=x+y;     return (z); } void process(int x,int y,int (*fun)(int, int)) {     int result;     result=fun(x,y);     printf("%d\n",result); } int main() {     //int max(),min(),add()     int a,b;     printf("enter a and b:");     scanf("%d,%d",&a,&b);     printf("max=");     process(a,b,max);     printf("min=");     process(a,b,min);     printf("add=");     process(a,b,add);  	return 0; }