首先记住一句话:指针函数是函数,函数指针是指针
指针函数:char *getword(char);返回值是指针的函数先举个栗子(栗子1):
#includechar * getword(char); char * getword(char n) { switch(n) { case'A':return "apple"; case'B':return "banana"; case'C':return "cat"; case'D':return "dog"; } } char main() { char m; scanf("%c",&m); printf("%sn",getword(m)); return 0; }
返回值是指针就是说返回值是个地址。
切记:不要返回局部变量的指针
再举个栗子(栗子2):
#includechar *getword(char); char *getword(char n), { char str1[] ="Apple"; char str2[]= "Banana"; char str3[] = "Cat"; char str4[] = "Dog"; char str5[] = "None"; switch(n) { case 'A':return str1; case 'B':return str2; case 'C':return str3; case 'D':return str4; default : return str5; } } char main() { char m; printf("input a char:n"); scanf("%c",&m); printf("%sn",getword(m)); return 0; }
在定义了一个函数指针后,给其传递一个已经被定义的函数名,就可以通过该指针进行调用
函数指针:int (*函数名)(参数类型),指向函数的指针,对应函数的地址;如:int (*sum)(int,int)再再举个栗子(栗子3):
#include函数指针作为参数的调用(薛微有一点点绕,初学者要认真仔细思考哦)int squre(int); int squre(int num) { return num*num; } int main() { int num; int (*fp)(int); fp = squre; scanf("%d",&num); printf("%d",(*fp)(num)); return 0; }
再次次举个栗子(栗子4):
#include函数指针作为返回值int sub(int,int); int add(int,int); int sub(int num1,int num2) { return num1-num2; } int add(int num1,int num2) { return num1+num2; } int fin(int (*fp)(int,int),int num1,int num2) { return (*fp)(num1,num2); } int main() { printf("2 + 3 = %dn",fin(add,2,3)); printf("2 - 3 = %dn",fin(sub,2,3)); return 0; }
还是先举个栗子(栗子5):
#includeint sub(int,int); int add(int,int); int fin(int (*fp)(int,int),int,int); int (* select (char) )(int,int); int sub(int num1,int num2) { return num1 - num2; } int add(int num1,int num2) { return num1 + num2; } int fin(int (*fp)(int,int),int num1,int num2) { return (*fp)(num1,num2); } int (*select(char op))(int,int) { switch(op) { case '+':return add; case '-':return sub; } } int main() { int num1,num2; char op; int (*fp)(int,int); printf("input a formula like(1+3):n"); scanf("%d%c%d",&num1,&op,&num2); fp = select(op); printf("%d %c %d = %d",num1,op,num2,fin(fp,num1,num2)); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)