typedef 用法小结
来源:互联网 发布:编程浪子 编辑:程序博客网 时间:2024/06/05 09:16
虽然知道 typedef 基本的用法,但是经常碰到一些奇怪的用法(比如用在函数,指针方面的时候)就比较容易糊涂。于是查了下资料后,在这里做一个总结,欢迎更新和指点。
1,typedef int INTEGER 指定用 INTEGER 代表 int 类型。即以下两行语句是等价的。
int i;
INTEGER i;
2,typedef struct date
{
int month,day,year;
}DATE,*P; 给结构体date一个新名称 DATE,并声明一个指向此结构体类型的指针。此用法如下所示。
#include<stdio.h>typedef struct node{int a;} NODE,*Pstr;int main(){NODE a;a.a = 20;Pstr t = new node;//此时与NODE *t 是等价的。t->a = 10;printf("%d %d\n",a.a,t->a);return 0;}
3,用typedef 可以声明数组类型。如以下两行代码是等价的。
(1)int a[10],b[10],c[10],d[10];//均是一位数组,大小也相同(2)typedef int ARR[10]; ARR a,b,c,d;//ARR为数组类型,它包含10个元素。因此a,b,c,d都被定义为一维数组,含10个元素4,当typedef碰到指针,并和const用在一起时。
在string库里面,有比较相等的重载函数strcmp(const char *,const char *);若想用一个别名代替char *。比如:typedef char * pstr;
则上面的函数参数变为strcmp(const pstr ,const pstr)。其实这样写是错误的!!
const char *p 代表的意思是 p 是一个指向char 的指针常量,所指的内容是不能改变的。而consr pstr 等价于 char * const p,此时所代表的意思是 p 是一个指向char的常量指针,p是不能改变的。
要想用typedef去替换,可以以这种形式:typedef const char * pstr;
5,sigal()是一种系统调用,用于通知运行时系统,在ANSI C标准中,sinnal()的声明如下:
void ( * signal( int sig, void (* func)(int) )) ( int );
看到这个函数的时候有没有感觉到头大?
signal 是一个函数,它返回一个函数指针,这个函数指针所指向的函数接受一个 int 参数并返回 void。
void (* func) ( int );它表示一个函数指针,所指向的函数接受一个 int 参数,返回值是 void。
现在我们用 typedef 来代表通用部分。
typedef void( * ptr_to_func ) ( int );//ptr_to_fun 是一个函数指针,该函数解释一个 int 参数,返回值为 void。
prc_to_func signal( int ,pre_to_func );//它表示 signal 是一个函数,它接受两个参数,其中一个是 int,另一个是 ptr_to_func。返回值是ptr_to_func。
6,当然 typedef 也有缺点,它具有与其他声明一样混乱的语法,同样可以把几个声明器放到一个声明中去。例如:typedef int *pstr,*arr[5]。但是最好不要在一个 typedef 中放几个声明器。
7,typedef 与 define 的区别:
(1)typedef 可以看成一种彻底的“封装”类型——在声明它之后不能在往里面增加其它的东西。比如:
#define peach intunsigned peach i;/*没问题*/typedef int banana;unsigned banana i;/*错误,非法*/(2)在连续几个变量的声明中,用 typedef 定义的类型能够保证所有变量为同意类型,而 #define 不行。比如:
#define int_ptr int *iint_ptr chalk,cheese;//相当于 int *chalk,cheese;即chalk 为指针类型,而cheese为int类型。typedef char * char_ptr;char_ptr Benley,Rolls;//此时两个变量均为 char * 类型。
- typedef 用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef 用法小结
- 转,typedef用法小结
- typedef 用法小结【转载】
- typedef用法小结
- typedef用法小结
- typedef用法小结(转)
- typedef用法小结
- typedef用法小结
- typedef用法小结
- typedef用法小结
- 窗口(window)对象:
- NYOJ 284 坦克大战(BFS)
- HTTP错误大全
- FCKeditorAPI接口的应用
- cout<<("four"+2+1);输出“r”?
- typedef 用法小结
- socket通信中包不全问题
- 最小割的一点理解
- 关于service的使用
- Camera 图像处理原理分析- 抗噪 变焦 频闪 等
- js截取字符串
- camera调试经验分享
- Java内存模型一
- 21点游戏(java源代码)复制粘贴就可以运行