zoukankan      html  css  js  c++  java
  • C 语言 typedef

        虽然#define语句看起来象typedef,但实际上却有本质上的差别。对于#define来说,仅在编译前对源代码进行了字符串替换处理;而对于typedef来说,它建立了一个新的数据类型别名。由此可见,只是将pch1定义为指针变量,却并没有实现程序员的意图,而是将pch2定义成了char型变量。

        在指针函数中,有这样一类函数,它们也返回指针,但是这个指针不是指向int、char之类的基本类型,而是指向函数。对于初学者,别说写出这样的函数声明,就是看到这样的写法也是一头雾水。比如,下面的语句:

             int (*ff(int))(int *, int);

    我们用上面介绍的方法分析一下,ff首先与后面的()”结合,即:

             int (*(ff(int)))(int *, int);                   // 用括号将ff(int)再括起来

    也就意味着,ff是一个函数。

        接着与前面的*”结合,说明ff函数的返回值是一个指针。然后再与后面的()”结合,也就是说,该指针指向的是一个函数。

    这种写法确实让人非常难懂,以至于一些初学者产生误解,认为写出别人看不懂的代码才能显示自己水平高。而事实上恰好相反,能否写出通俗易懂的代码是衡量程序员是否优秀的标准。一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:

             int (*PF)(int *, int);

    也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:

             typedef int (*PF)(int *, int);

    这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:

             PF ff(int);

  • 相关阅读:
    harbor install & docker-compose
    ngx安装 (转)
    docker对镜像自动重启的设置
    docker安装脚本
    sql中的递归拼接
    【HC89S003F4开发板】 4端口消抖
    【HC89S003F4开发板】 6crc校验
    【HC89S003F4开发板】 3串口调试
    【HC89S003F4开发板】 1环境搭建
    用mkdocs在gitee码云上建立一个简单的文档博客
  • 原文地址:https://www.cnblogs.com/olivetree123/p/4709527.html
Copyright © 2011-2022 走看看