指针函数和函数指针

指针函数和函数指针,第1张

指针函数和函数指针

首先记住一句话:指针函数是函数,函数指针是指针

指针函数:char *getword(char);返回值是指针的函数

先举个栗子(栗子1):

#include
char * getword(char);
char * getword(char n)
{
    switch(n)
    {
        case'A':return "apple"; 
        case'B':return "banana";
        case'C':return "cat";
        case'D':return "dog";
    }
}
char main()
{
    char m;
    scanf("%c",&m);
    printf("%sn",getword(m));
    return 0;
}

返回值是指针就是说返回值是个地址。

切记:不要返回局部变量的指针

再举个栗子(栗子2):

#include

char *getword(char);
char *getword(char n),
{
    char str1[] ="Apple";
    char str2[]= "Banana";
    char str3[] = "Cat";
    char str4[] = "Dog";
    char str5[] = "None";
    switch(n)
    {
        case 'A':return str1;
        case 'B':return str2;
        case 'C':return str3;
        case 'D':return str4;
        default : return str5;
    }
}
char main()
{
    char m;                                                                       
    printf("input a char:n");                                  
    scanf("%c",&m);                                        
    printf("%sn",getword(m));
    return 0;                                                        
}

在定义了一个函数指针后,给其传递一个已经被定义的函数名,就可以通过该指针进行调用

函数指针:int (*函数名)(参数类型),指向函数的指针,对应函数的地址;如:int (*sum)(int,int)

再再举个栗子(栗子3):

#include
int squre(int);
int squre(int num)
{
    return num*num;
}
int main()
{
    int num;
    int (*fp)(int);       
    fp = squre; 
    scanf("%d",&num);
    printf("%d",(*fp)(num));
    return 0;
}

函数指针作为参数的调用(薛微有一点点绕,初学者要认真仔细思考哦)

再次次举个栗子(栗子4):

#include
int sub(int,int);
int add(int,int);

int sub(int num1,int num2)
{
    return num1-num2;
}

int add(int num1,int num2)
{
    return num1+num2;
}

int fin(int (*fp)(int,int),int num1,int num2)
{
    return (*fp)(num1,num2); 
}

int main()
{
    printf("2 + 3 = %dn",fin(add,2,3));              
    printf("2 - 3 = %dn",fin(sub,2,3));               
    return 0;                                          
}
函数指针作为返回值

还是先举个栗子(栗子5):

#include                                            

int sub(int,int);
int add(int,int);
int fin(int (*fp)(int,int),int,int);                     
int (* select (char) )(int,int);                            

int sub(int num1,int num2)                            
{
    return num1 - num2;
}

int add(int num1,int num2)
{
    return num1 + num2;
}

int fin(int (*fp)(int,int),int num1,int num2)       
{
    return (*fp)(num1,num2);                                  
}

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

int main()
{
    int num1,num2;
    char op;    
    int (*fp)(int,int);
    printf("input a formula like(1+3):n");
    scanf("%d%c%d",&num1,&op,&num2);
    fp = select(op);                                       
    printf("%d %c %d = %d",num1,op,num2,fin(fp,num1,num2));
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存