zoukankan      html  css  js  c++  java
  • C语言基础:C语言指针(7)

    前几节, 我们讲了指针对于数组, 字符串, 还有一些补充的知识, 现在我们来讲指针的最后一个应用, 那就是函数指针.


    下面我们来看一个小例子:

    #include <stdio.h>
    char *test();
    
    int main()
    {
        char *name = test();
        
        printf("name=%s
    ", name);
        
        return 0;
    }
    
    char *test()
    {
        return "rose";
    }



    这个例子的函数, 其实是返回char类型的函数指针, 然后在main函数里接收并且打印, 也就是相当于:

    char *name = "rose";

    PS:但是类型一定要能够兼容.


    下面我们再来看另一个小例子:

    #include <stdio.h>
    
    void test();
    
    int main()
    {
        // (*p)是固定的写法
        // 左边的void: 指针变量p指向的函数没有类型
        // 右边的(): 指针变量p指向的函数没有形参
        void (*p)();
        
        // 指针变量p指向了函数test
        p = test;
        
        // 有三种调用的方法
        p();
        //(*p)(); 利用指针间接调用函数
        //test(); 直接调用函数
        
        return 0;
    }
    
    
    void test()
    {
        printf("我调用了test函数
    ");
    }

    有些人会感到疑惑, 为什么函数也能用指针调用呢?

    答案其实很简单, 因为内存, 只要在程序里有地址的变量, 或者函数, 什么都可以, 只要你有地址, 指针就能指向该XXXX, 这样子解释应该不难理解, 所以在这个程序里, 是可以调用的.


    再来一个完整的小例子:

    #include <stdio.h>
    
    int test2(int a, int b)
    {
        int sum = a + b;
        printf("sum = %d
    ", sum);
        
        return sum;
    }
    
    int main()
    {
        int (*p)(int, int);
        
        p = test2;
        
        p(10, 20);
        
        return 0;
    }
    

    看完这个小例子之后, 大家对函数的指针应该更加的深刻认识了, 好了, 指针这一章就到这里结束了, 过后我会继续添加更多的C语言基础知识~~谢谢~~

  • 相关阅读:
    基础1-安装zookeeper
    Logstash-input-file 配置
    Logstash-input-rabbitmq 配置
    EF 部分更新 忽略NULL
    CoreApi 3.1
    logstash基于RabbitMQ的输入配置
    史上最详细的linux三剑客讲解-grep-awk-sed
    CDN概述
    HttpDNS和传统DNS的区别
    Linux性能分析工具之----mpstat
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282888.html
Copyright © 2011-2022 走看看