【C语言】指针函数 & 函数指针

指针函数

格式:返回类型 *函数名(参数列表);

不要返回局部变量的指针

举个例子

#include <stdio.h>

char *get_Word(char s);
char *get_Word(char s)
{
    char str[] = "Apple"; // 函数内的局部变量

    switch (s)
    {
        case 'A': return str; // 无法返回这个 str
        case 'B': return "Bad";
        case 'C': return "Cat";
        default: return "None";
    }
}

int main()
{
    char i;
    printf("请输入一个字母:");
    scanf("%s",&i);
    printf("%s\n",get_Word(i));

    return 0;
}

mark

函数指针

定义格式:返回值 (*名称)(参数类型);

#include  <stdio.h>

int square(int num);
int square(int num){
    return num * num;
}

int main(){

    int num;
    int (*fp)(int); // 定义 函数指针

    printf("输入一个数字: ");
    scanf("%d",&num);
    fp = square;

    printf("%d * %d = %d\n",num,num,(*fp)(num));
    printf("%d * %d = %d\n",num,num,*fp(num));

    return 0;
}

mark

头脑风暴

涉及知识 & 实现功能

涉及知识

函数指针 作为函数的返回值

实现功能

用户输入一个式子(1+5)自动判断符号,进行相应的运算

代码说明

声明函数

int add(int, int); // 加法函数
int sub(int, int); // 减法函数
int (*select(char))(int, int);    // 符号选择,返回相应的计算函数
int calc(int (*)(int, int), int, int); // 计算函数,传入一个函数指针,以及两个数字

函数方法

// 加法函数
int add(int num1, int num2){
    return num1 + num2;
}

// 减法函数
int sub(int num1, int num2){
    return num1 - num2;
}

// 符号选择
int (*select(char op))(int, int){
    switch (op){
        case '+':return add;
        case '-':return sub;
    }
}

// 计算函数
int calc(int (*fp)(int, int), int num1, int num2){
    return (*fp)(num1, num2);
}

使用

#include <stdio.h>

int main(){
    int num1 = 0, num2 = 0;
    char op;
    int (*fp)(int,int); // 接收函数指针 

    printf("输入一个式子(1+1):");
    scanf("%d%c%d", &num1, &op, &num2);

    fp = select(op); // 符号选择,返回函数指针
    printf("%d %c %d = %d",num1,op,num2,calc(fp,num1,num2));

    return 0;
}

mark

发表评论 / Comment

用心评论~