转载自:http://www.cnblogs.com/ggjucheng/archive/2011/12/27/2303238.html

引言

typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

typedef的使用方法如下:

typedef existing_type new_type_name ;

注意:typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。

typedef的最简单使用

typedef int size;
typedef unsigned int WORD;

第一个声明定义了一个char的同义词,名字为C,你可以在任何需要int的上下文使用size。
第二个声明定义了一个unsigned int的同义词,名字为WORD,你可以在任何需要int的上下文使用WORD。

typedef和数组,指针

我们可以不用象下面这样重复定义有 81 个字符元素的数组:

char line[];
char text[];

定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:

typedef char Line[];
Line text, secondline;

同样,可以象下面这样隐藏指针语法:

typedef char * pstr;
pstr str = "abc";
int mystrcmp(pstr, pstr);

typedef和函数

函数指针一般用于回调,例如信号处理,libcurl等会应用到回调。回调是比较常用的技术,而回调就要涉及函数指针。
当我们的程序中有以下函数:

void printHello(int i);

然后我们要定义一个函数指针,指向printHello,并且调用这个方法,代码如下:

void (*pFunc)(int);
pFunc = &printHello;
(*pFunc)();

其中void (*pFunc)(int)是声明一个函数指针,指向返回值是void,调用参数是(int)的函数,变量名是pFunc,pFunc就是函数指针了,以前是函数指针的简单用法。
大家可以看到,声明一个函数指针是比较复杂的,尤其是当你要在多处地方声明同一个类型的函数指针变量,代码更加复杂,所以有下面简化的做法:

typedef void (*PrintHelloHandle)(int);

使用代码如下:

PrintHelloHandle pFunc;
pFunc = &printHello;
(*pFunc)();

以后其他地方的程序需要声明类似的函数指针,只需要下面代码:

PrintHelloHandle pFuncOther;

这样,我们的代码就变得更加简洁易懂。

typedef心得

大家在看typedef和数组,指针以及typedef和函数,可能会觉得typedef比较复杂,但是其实typedef 行为有点像 #define 宏,用其实际类型替代同义字。
请看看下面例子

typedef char * pstr;
pstr mystr;

代码pstr mystr,展开之后就是char * mystr,把mystr,替换为语句typedef char * pstr的pstr,展开之后还是char * mystr。
typedef并不创建新的类型,typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换而已。
这些规则可以应用到typedef和数组:

typedef char Line[];
Line text;

把text替换为typedef char Line[81]的Line,展开之后就是

char text[]; 

也可以应用到最复杂的typedef和指针

typedef void (*PrintHelloHandle)(int);
PrintHelloHandle pFunc;

将pFunc替换typedef void (*PrintHelloHandle)(int),展开之后就是

void (*pFunc)(int);

其实就是声明一个pFunc函数指针而已,根本没有PrintHelloHandle这种类型。

typedef函数用法的更多相关文章

  1. (转)typedef 函数指针的用法

    typedef 函数指针的用法   在网上搜索函数指针,看到一个例子.开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它.其实很多时候都 ...

  2. typedef 函数指针的用法

    转自:http://www.cnblogs.com/shenlian/archive/2011/05/21/2053149.html typedef 函数指针的用法 在网上搜索函数指针,看到一个例子. ...

  3. [转载]typedef常见用法

    注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 ...

  4. 详谈typedef的用法

    我们都知道typedef是类型重定义,既然是重定义就不可能出现新的数据类型,只是将已有的数据类型进行换个名字而已,但是这有什么用呢?可能我们学的时候,给的例子都是:typedef int INT; 然 ...

  5. C 中typedef 函数指针的使用

    类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer ...

  6. typedef的用法总结

    typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上, ...

  7. typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

    首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...

  8. C中typedef 函数指针的使用

    类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer ...

  9. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

随机推荐

  1. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

  2. 在网页标题上加个logo

    只需在title标签上加个link标签即可 <link rel="icon" href="images/icon.png" > <title& ...

  3. netty-socket.io点对点通讯和聊天室通讯

    netty-socketio是基于netty的socket.io服务实现,可以无缝对接前端使用的socketio-client.js. 相对于javaee的原生websocket支持(@serverE ...

  4. get请求中文乱码问题

    Get中文乱码解决 Get请求类型: <form action="${pageContext.request.contextPath}/addArtical.action"  ...

  5. mysql 按值排序

    order by FIELD(AuditorStatus,3,0,1,2) laravel 写法 $data = $query->orderByRaw(\DB::Raw('FIELD(Audit ...

  6. python scrapy实战糗事百科保存到json文件里

    编写qsbk_spider.py爬虫文件 # -*- coding: utf-8 -*- import scrapy from qsbk.items import QsbkItem from scra ...

  7. C# 打开帮助文档,打开电脑中其他应用或者文件

    打开帮助文档 System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + "\\" + "hel ...

  8. opencv 图像的线性混合

    1 线性混合理论 g(x) = (1-α)*f1(x) + α*f2(x) 其中,α代表图像的权重 #include<iostream> #include<opencv2/openc ...

  9. POJ:2566-Bound Found(尺取变形好题)

    Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1735 Special J ...

  10. POJ:3421-X-factor Chains(因式分解)(全排列)

    X-factor Chains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7986 Accepted: 2546 Descr ...