指针函数和函数指针

2021-10-10  本文已影响0人  lxr_
//指针函数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;
}

上一篇下一篇

猜你喜欢

热点阅读