typedef 总结
其实在正儿八经学C语言的时候typedef用的不是很多,记得书上对它的介绍只是一笔带过。的确它的用法是很简单,但这不代表在使用的过程中不会出错,今天来个彻底的总结。
作用:用来建立新的数据类型名。(注意:这里是新的数据类型名,而不是新的数据类型)。
基本用法:
1)
typedef int Size;
将Size定义为与int具有相同意义的名字。类型Size可以用于类型声明,类型转换等,它和 int 完全相同,如:
Size size;
Size maxSize;
Size *sp;
2)
typedef char *String;
将String定义为与Char*同义,此后,则可以在类型声明和类型转换中使用String
String p; //p为指向char类型的指针
String arr[MAXLEN]; // arr为元素类型为指向char类型指针的数组
以上两种情况,很好理解,一般都不会出问题,容易出错的是下面这种情况:
3)
typedef int *pt; const pt ivar1;
pt const ivar2;
那么 ivar1 和 ivar2 的类型是什么呢?
也许有些童鞋会说 ivar1 是指向 int 常量的指针,而 ivar2 是指向 int 类型的const指针。
其实在这里 ivar1 和 ivar2 的类型是相同的,都是指向 int 类型的const指针。
之所以会把 ivar1 的类型搞错,是因为我们将 typedef 当做文本扩展了。即把 ivar1的声明当成如下形式了:
const int * ivar1;
我们应该将 (int *) 作为一个整体来看待,则不论const 在 pt 前面 还是 pt 后面 ,const 修饰的是 pt 的类型。和如下的定义是一个道理:
const int i;
int const i;
即,不论const 在 int 前面还是后面它修饰的是 int 类型。当我们把上面例子中的 int * 看做一个 整体(int *) 时,道理是一样的。
注:3)中的类比只是用来帮助我们理解。
使用typedef 的目的 or 好处:
1) 为了时表达式更加简洁:
函数指针类型通常相当的冗长,可以用typedef 大大的简化。
typedef int (*cmpFcn)(const char *, const char *);
该定义表示cmpFcn是一种指向函数的指针类型的名字。要使用这种指针类型时只需直接使用cmpFcn即可,不必每次把整个声明都写出来。
2) 为了隐藏特定类型的实现,强调类型的使用目的
3) 允许一种类型用于多个目的,同时使得每次使用给类型的目的明确。
typedef 总结的更多相关文章
- 19-typedef
本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...
- #define与typedef在重定义类型中的区别
#define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...
- typedef
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...
- 用typedef定义函数指针的问题
在学习windows API的时候,遇到下面这段代码 以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName 这种给数据类型 ...
- C语言语法 typedef小结
在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- C及C++中typedef的简单使用指南
又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...
- [转]关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- typedef 和 #define 的区别
本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...
- [转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
随机推荐
- hdu 4739 Zhuge Liang's Mines (简单dfs)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Android实现应用下载并自动安装apk包
安装: ? 1 2 3 4 5 String str = "/CanavaCancel.apk"; String fileName = Environment.getExterna ...
- HDU Computer Transformation1041 题解
Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...
- C#中析构函数,命名空间及字符串的运用(Ninth day)
又到了总结知识的时间了,今天在云和学院学习了析构函数,命名空间及字符串的处理,现在就为大家总结下来. 理论: 析构函数 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无 ...
- 详解虚拟机(windows)下搭建SVN服务器
安装前的准备 1.虚拟机的用户名最好是英文 2.严格按照步骤做,否则有可能不成功 3.如果安装失败,在虚拟机下的控制板完全下载VisualSVN-Server-2.7.7,重新安装 软件下载地址: h ...
- __call重载方法
<?php class Person { function du() { echo "这是一个存在的方法"; } //该方法有两个参数,第一个参数 $function_nam ...
- Ants (POJ 1852)
题目描述: Description An army of ants walk on a horizontal pole of length l cm, each with a constant spe ...
- SQL——表结构或数据的复制
一.复制表结构及数据到新表 create table new_tb select * from old_tb 二.只复制表结构到新表 create table new_tb select * from ...
- QProcess与外部程序的调用(可以通过设置管道来交互)
项目做到一定阶段,经常需要在原来的工程上调用外部程序.Qt为此提供了QProcess类,QProcess可用于完成启动外部程序,并与之交互通信. 一.启动外部程序的两种方式:(1)一体式:void Q ...
- 关于R.styleable的问题
原来想直接想调用程序的东西,但是使用R.styleable的时候 eclipse不能解析了,后来发现原来被删除了此方法 public ImageAdapter(Context c) { mContex ...