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);

  • 相关阅读:
    初次接触json...
    vector algorithm find
    网站安全(13) ——目录穿越漏洞(Directory Traversal)
    网站安全(20) —— 语义URL攻击
    网站安全(7) —— PHP文件包含漏洞介绍
    让PHP更快的提供文件下载
    PHP中关于include()和require() 的区别问题
    PHP中 获取全路径的文件的扩展名
    MySQL varchar计算:求列的数目和计算N的最大值
    jmeter使用分享
  • 原文地址:https://www.cnblogs.com/olivetree123/p/4709527.html
Copyright © 2011-2022 走看看