typedef的陷阱】的更多相关文章

typedef定义了一种类型的新别名,不同于宏,它不是简单的字符串替换.比如: 先定义: typedef char* PSTR; 然后: int mystrcmp(const PSTR, const PSTR); const PSTR实际上相当于const char吗?不是的,它实际上相当于char const. 原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const. 简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就…
一.typedef的用法 1.用typedef来声明新的类型名,来代替已有的类型名,也就是给类型起别名.比如 typedef float REAL; //用REAL来代表float类型 REAL a; //定义一个REAL类型的变量,等价于float a,即定义一个float类型的变量a 这种用法经常用来作为定义与平台无关的类型,方便代码的跨平台移植. 例如,定义REAL类型为目标平台精度最高的类型. 1>在支持long double的平台上定义为: typedef long double RE…
typedef是一个我们常常会用到的关键字,而这个关键字有许多陷阱或者说许多不为我们深入理解的地方.很多书上都是很简单地一笔代过,并没有真正地让我们理解这个关键字.本文对其进行详细地说明.综合网络上找到的资料对其进行分析,这其中会涉及到一些其他c方面的内容(比如指针,指向函数的指针,编译时候数据类型未定义与完全定义知识等等),看到这些内容的时候大家可以忽略,这个重点是在typedef.好了,不说那么多开始吧. <h4>typedef的定义</h4> typedef 是一个关键字,后…
typedef的陷阱 严格来说typedef并不是定义别名,而是定义类型,比如typedef int a;按照大部分书本说来,就是把a看做int,这种说法初学看来是正确的,也易于理解,但是遇到type int a[10]这种就纳闷了,这怎么替换?其实typedef是定义了一种类型,把typedef拿掉看就是int a[10],它定义了一个数组a,a是一种具有10个int对象的数组,加上typedef之后,a可以拿来当一种新的类型使用,即a a1;表示a1是a这种类型,而aa是一种具有10个int…
自 http://niehan.blog.techweb.com.cn/archives/325.html typedef用来声明一个别名,typedef后面的语法,是一个声明.本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数.罪魁祸首又是那些害人的教材.在这些教材中介绍typedef的时候通常会写出如下形式: typedef int PARA; 这种形式跟#define int PARA几乎一样,如前面几章所述,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全…
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量:以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省…
typedef用来声明一个别名,typedef关键字后面是一个声明.语法上typedef属于存储类声明说明符 一.引言 如果你理解typedef的简单形式: typedef int PARA; 这种形式跟#define int PARA几乎一样. 那么你是否也理解了如下的一些声明: typedef int a[10]; a[10]是int的别名吗?? typedef void (*p)(void); (*p)(void)是void的别名吗?? 以为a[10]是int的别名,(*p)(void)是…
http://www.cnblogs.com/afarmer/archive/2011/05/05/2038201.html 一.基本概念剖析 int* (*a[5])(int, char*);       //#1 void (*b[10]) (void (*)()); //#2 double(*)() (*pa)[9];          //#3 1.C语言中函数声明和数组声明.函数声明一般是这样: int fun(int, double); 对应函数指针(pointer to funct…
1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key); mapTest.erase(iter); 像上面这种删除单个节点,map的行为不会出现问题,但是当在一个循环里用的时候,往往会被误用. 2.陷阱 eg: for(ITER iter=mapTest…
typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点. 二.#…