指针函数和函数指针

指针函数

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值