1.typedef
(1)typedef的使用
定义一种类型的别名,而不只是简单的宏替换(见陷阱一)。用作同时声明指针型的多个对象
typedef char* PCHAR; // 一般用大写,为char*起个别名PCHAR PCHAR pa, pb; // 可同时声明了两个指向字符变量的指针,若是char* a,b则不行,只是声明了一个指针a,一个字符b
typedef struct node NODE;//struct node = NODE,eg:struct node n; <==> NODE n;其中n为node型非指针变量 typedef struct node* PNODE//struct node* = PNODE,eg:struct node* a; <==> PNODE a;其中a为node型指针变量
typedef struct NODE;//不能这样定义,报错缺变量
(2)typedef两大陷阱
typedef定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如:
先定义:
typedef char* PSTR;
然后:
int mystrcmp(const PSTR, const PSTR);
const PSTR实际上相当于const char*吗?不是的,它实际上相当于char* const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。
陷阱二:
typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如:
typedef static int INT2; //不可行
编译将失败,会提示“指定了一个以上的存储类”。
以上资料出自: http://blog.sina.com.cn/s/blog_4826f7970100074k.html
2.C++定义结构体的几种方式
(1)非指针型结构体
struct Seqlist{//C++标准定义结构体方法 int elem[MAX];//数组 int len;//数组长 }var1;//定义结构体变量/对象 var1
typedef struct SS{ int elem[MAX];//数组 int len;//数组长 }Seqlist;//为结构体SS起一个别名Seqlist typedef struct{ int elem[MAX];//数组 int len;//数组长 }Seqlist;//定义匿名结构体,别名为Seqlist
(2)指针型结构体(两种定义二叉树的方法,第一种为规范方法)
struct BinTNode{ //定义结点 char data; struct BinTNode *lchild, *rchild;//经测试,在vc6.0中去掉struct也行 }var1;//定义结构体变量/对象 var1
typedef BinTNode *BinTree; //定义二叉树,本质是结构体指针或节点指针 typedef struct node{ //定义结点 char data; struct node *lchild, *rchild; }BinTNode,*BinTree; //定义二叉树
3.C语言中结构体定义
typedef struct tagMyStruct { int iNum; long lLength; } MyStruct;
在C中,这个申明后申请结构变量的方法有两种:
(1)struct tagMyStruct 变量名
(2)MyStruct 变量名
在C++中可以有
(1)struct tagMyStruct 变量名
(2)MyStruct 变量名
(3)tagMyStruct 变量名
https://www.cnblogs.com/qyaizs/articles/2039101.html
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。