美文网首页
指针函数和函数指针

指针函数和函数指针

作者: lxr_ | 来源:发表于2021-10-10 11:35 被阅读0次
    //指针函数int *p():返回值为指针类型的函数,不要返回局部变量的指针,因为其作用域仅限于函数内
    //函数指针int (*p)():
    #include <stdio.h>
    
    //***********指针函数*****************
    char* getWord(char c)
    {
        char str1[] = "apple"; 
        char str2[] = "banana";
        switch (c)
        {
        case 'A':return "Apple";  //而此字符串存储于常量区
        case 'a':return str1;     //若运行此语句,出错,不能返回局部变量地址
        case 'B':return "Banana";
        case 'b':return str2;     //出错,不能返回局部变量地址
        case 'C':return "Cat";
        default:return "None";
        }
    }
    
    //**************函数指针********************
    int square(int num)
    {
        return num * num;
    }
    
    //**************函数指针作为参数********************
    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 (*select(char op))(int, int)   //先select(char)是一个函数,再加*返回整形并带有两个参数(int,int)的函数指针
    {
        switch (op)
        {
        case '+':return add;
        case '-':return sub;
        default:
            break;
        }
    }
    
    int main(int argc, char** argv)
    {
        //*************指针函数**************
        char input;
        
        printf("请输入一个字母:");
        scanf_s("%c", &input,1);  //与scanf一样的功能,此函数更安全,表示最多读取一个字符,防止内存访问越界
    
        printf("%s\n", getWord(input));
    
        //*************函数指针***************
        //不直接调用,而通过函数指针引用square,然后通过函数指针调用square
        int num;
        int (*fp)(int);    //定义函数指针fp,指向的函数类型为int
        printf("请输入与一个数字:");
        scanf_s("%d", &num);
    
        fp = square;       //函数名其实就表示地址
        printf("%d*%d=%d\n", num, num, (*fp)(num));
        //printf("%d*%d=%d\n", num, num, fp(num));  //这样也可以,但不建议,fp容易被认为是函数
    
        //************函数指针作为参数************
        printf("3+5=%d\n", calc(add, 3, 5));  //3+5=8
        printf("3-5=%d\n", calc(sub, 3, 5));  //3-5=-2
    
        //************函数指针作为返回值**************
        int num1, num2;
        char op;
        int (*fpp)(int, int);
    
        printf("请输入一个式子(如1+3):");
        scanf("%d%c%d", &num1, &op, &num2); //visual studio使用scanf时报错的话可采取如下解决办法:https://jingyan.baidu.com/article/49711c616b8a1ffa441b7cdc.html
    
        fpp = select(op);
        printf("%d %c %d = %d\n", num1, op, num2, calc(fpp, num1, num2));
    
    
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:指针函数和函数指针

          本文链接:https://www.haomeiwen.com/subject/usyqoltx.html