指针函数
#include <cstdio>
char *getword(char);
char *getword(char c){
/*char str[] = "apple";
* return str;
* 程序出错,返回null;
*/
switch (c){
case 'A':
return "apple";
case 'B':
return "banana";
case 'C':
return "cat";
default:
return "none";
}
}
int main(int argc, char *argv[]) {
char input;
printf("please input a string:");
scanf("%c", &input);
printf("%s \n", getword(input));
return 0;
}
使用指针变量作为函数的的返回值,就是指针函数
不能返回局部变量的指针
函数指针
#include <cstdio>
int square(int num) {
return num * num;
}
int main(int argc, char *argv[]) {
int num;
int (*fp)(int); // 定义一个函数指针 (int) 为参数类型
printf("请输入一个整形数:");
scanf("%d", &num);
fp = square; // 为函数指针赋值
printf("%d * %d = %d\n", num, num, (*fp)(num)); // 为读取函数的返回值
return 0;
}
函数指针作为参数
#include <cstdio>
int add(int num1, int num2);
int sub(int num1, int num2);
int calc(int (*fp)(int, int), int num1, int num2);
int add(int num1, int num2) {
return num1 + num2;
}
int sub(int num1, int num2) {
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2) {
return (*fp)(num1, num2);
}
int main(int argc, char *argv[]) {
printf("3 + 5 = %d\n", calc(add, 3, 5));
printf("3 - 5 = %d\n", calc(sub, 3, 5));
return 0;
}
函数指针作为返回值
#include <cstdio>
int add(int, int);
int sub(int, int);
int calc(int (*)(int, int), int, int);
int (*select(char))(int, int);
int add(int num1, int num2){
return num1 + num2;
}
int sub(int num1, int num2){
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2){
return (*fp)(num1, num2);
}
/*
* 返回值为函数指针的函数
* select为函数名
* char op 为参数列表
* 这个是根据运算符的优先级来确定的
* 可以参考指针函数返回的指针*/
int (*select(char op))(int, int){
switch (op){
case '+':
return add;
case '-':
return sub;
}
}
int main(int argc, char *argv[]){
int num1, num2;
char op;
int (*fp)(int, int);
printf("请输入一个式子如(1+3):");
scanf("%d%c%d", &num1, &op, &num2);
fp = select(op);
printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
return 0;
}