美文网首页
指向函数的指针

指向函数的指针

作者: 越天高 | 来源:发表于2019-02-18 21:21 被阅读3次

理解

函数也会占用一块存储空间
因为函数也会占用一块存储空间所以函数也由自己的地址
函数的地址保存在函数名中
函数名就是函数的地址 == 数组名就是数组的地址

定义

1.没有返回值没有参数
2.没有返回值有参数
3.有返回值没有参数
4.有返回值有参数
指向函数的指针的定义格式

        void (*funtionP) ();
         * :代表是一个指针
         funtionP:代表指针变量的名称,区分
         (*funtionP):代表将来指向一个函数
         void: 代表有无返回值
         (): 将来指向的函数有没有参数
         画普通指针的定义格式
         变量类型 * 指针名称;
         int *p;

void (*funtionP)(void) = test; // 注意: 千万不能写成test()
        test(); // 0x100000f00();
        //(*funtionP)(); // 0x100000f00()
         // test == funtionP
         funtionP();
        int (*funAge)(void) = getAge;
        int age = funAge();
        printf("age = %i\n", age);

        int (*sumP) (int , int);
        sumP = sum;
        printf("这两个数的和 = %i\n", sumP(2,3));
        
        void (*sum2P)(int,int) = sum2;
        sum2P(4,5);

应用场景

当我们不确定参数 也不确定 是执行哪个函数的时候
让demo接受一个指向函数的指针
以后我们只需要给demo函数传递对应的指针, 那么函数内部就可以调用不同的函数

int sum (int a, int b)
{
    return a +b;
}
int minus (int a, int b)
{
    return a - b;
}
int demo3(int v1, int v2, int (*p)(int, int))
{
    return p(v1,v2);
int  (*funP)(int ,int);
        funP = sum;
        printf("这两个数的和 == %i",demo3(1, 2, funP));
        
        funP = minus;
        printf("这两个数的差 == %i",        demo3(3, 1, funP));
        
}

指向函数的指针的练习

需求: 要求用户输入一段英文, 将用户输入的英文单词所有的首字母大写
hello world --> Hello World
1.先实现接受字符串
2.再实现字母的大小写转换
3.再实现替换字符串中的单词首字符

char upper(char value){
    //先判断字母是大小写
    if (value >= 'a' && value <= 'z') {
        // 2.将小写字母转换为大写字母
        value = value - ('a'  - 'A'); // 32 小写的ascii大于大写
    }
    return value;
}
void upperCase (char *temp){
    if (*temp >= 'a' && *temp <= 'z') {
        // 2.将小写字母转换为大写字母
        *temp = *temp - ('a'  - 'A'); // 32 小写的ascii大于大写
    }
}
void ts(char *temp, void (*funtionP)(char *));
int main(int argc, const char * argv[]) {
    @autoreleasepool {
    printf("请输入一句英文, 单词之间用空格隔开\n");
   //char *str;
    char str[100];
   // scanf("%s", str);
    gets(str);
    printf("str = %s", str);
    char c = 'a'; // + - 1
    printf("c = %c\n", upper(c));
        char *temp = str;
        void (*funP)(char *) = upperCase;
        ts(temp, funP);
        printf("str = %s\n", str);
    }
    
    return 0;
}
void ts(char *temp, void (*funtionP)(char *))
{
    funtionP (temp);
    while (*temp !='\0') {
        if (*temp == ' ') {
            funtionP(++temp);
        }else{
            temp ++;
        }
    }
    
}

相关文章

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • 指针

    一. 指针指向的是对象的地址//函数指针:指针指向函数//指针函数:函数返回指针 二.

  • 回调函数

    函数指针 (1) 函数指针是指指向函数而非指向对象的指针。像其它指针一样,函数指针也指向某个特定的函数类型,函数类...

  • C语言基础知识点

    函数指针与回调函数 1、函数指针:函数指针是指向函数的指针变量,以下实例声明了函数指针变量 p,指向函数 max:...

  • C语言学习六 — 函数指针,回调函数,字符串与结构体

    函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向...

  • C语言基础教程之函数指针

    函数指针 函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函...

  • C函数指针

    函数指针 函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函...

  • c++ 指针

    函数指针 是指向函数的指针变量,即重点是一个指针。一种特殊的指针,它指向函数的入口;要声明指向特定类型的函数指针,...

  • Coursera公开课——C++ Week2笔记

    函数指针 函数指针直接指向函数的开头。

  • C语言----函数指针

    函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。 函...

网友评论

      本文标题:指向函数的指针

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