• C语言笔试常考知识点


    1. const 关键字

        a)  const int a;

        b)  int const a;

        c)  const int *a;

        d)  int * const a;

        e)  int const * const a;

    解析:

        a)  a为一个int型变量,在它被定义时就应当对其初始化,因为以后就没有机会再去改变它了。

        b)  与 a) 是一个意思,const 与 int 的位置可以互换。

        c)  const 与 int 修饰的都是 (*a) ,这里的a是一个指向 int 型变量的指针,指针 a 的值可以被修改,(*a) 即 a 指向的变量不能被修改。

        d)  const 修饰 a, 而int 修饰 (*a) ,这里的a是一个指向 int 型变量的指针,指针 a 的值不能被修改,(*a) 即 a 指向的变量可以被修改。 

        e)  指针 a 的值与 (*a)即a指向的变量均不能被修改。

    总结:

        1)  如果 const 与 int 是挨在一起的,中间没有*,则两者的位置是可以互换的。

        2)  如果 const 或是 int 之后是*,则 const 或是 int 修饰的是(*a),即修饰的是指针 a 指向的变量。

    2. (*((void (*)( ))0x80004000)) ( )

    解析:

        先看 (void (*)( ))0x80004000 。

        其中的 void (*)( ) 是函数指针类型,该函数的形参为空,返回值类型为 void 。

        于是,(void (*)( ))0x80004000 就是表示,将 0x80004000 强制转换为 void (*)( ) 类型的函数指针,即0x80004000是某函数的入口地址。

        然后,请回忆一下 (*p)() 是什么意思?没错,这是用函数指针调用函数的形式。

        那么,(*((void (*)( ))0x80004000)) ( ) 就是表示,调用某一个函数, 该函数的入口地址为0x80004000,该函数的形参为空,无返回值。

     

    3. void * ( * (*fp1)(int))[10]; 

        float (*(* fp2)(int,int,int))(int);

        int (* ( * fp3)())[10]();

        分别表示什么意思? 
    解析:                                                           

        1. void * ( * (*fp1)(int))[10];   fp1是一个指针,指向一个函数,这个函数的参数为int型,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个void*型指针。

        2. float (*(* fp2)(int,int,int))(int);   fp2是一个指针,指向一个函数,这个函数的参数为3个int型,函数的返回值是一个指针,这个指针指向一个函数,这个函数的参数为int型,函数的返回值是float型。 

        3. int (* ( * fp3)())[10]();   fp3是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是int型。 

    4. 有关指针的数据类型的小结

    定义 含义
    int i; 定义整型变量i
    int *p; p为指向整型数据的指针变量
    int a[n]; 定义整型数组a,它有n个元素
    int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成
    int (*p)[n]; p为指向含n个元素的一维数组的指针变量,每一个元素均为整型数据
    int (*p)[n]();

    p为指向含n个元素的一维数组的指针变量,每一个元素均为一个函数指针,该函数无形参,返回int型数据

    int f(); f为带回整型数值的函数
    int *p(); p为带回一个指针的函数,该函数指向整型数据
    int (*p)(); p为指向函数的指针,该函数返回一个整型数据
    int **p; p为一个指针变量,它指向一个指向整型数据的指针变量

    参考文档:《彻底搞定C指针》

  • 相关阅读:
    CentOS7 使用定时任务
    springboot整合mybatis+mysql+druid数据源
    js 防抖和节流,封装成函数
    vue 单页面项目卸载依赖和插件的方式
    Tomcat部署vue单页面项目
    linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (二)
    linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (一)
    软构设计模式简单归纳
    软件构造复习中关于不变性的一个疑问以及代码验证
    代码快照图与可变不可变
  • 原文地址:https://www.cnblogs.com/outs/p/5103868.html
Copyright © 2020-2023  润新知