我是一只小小鸟
全部博文(184)
分类: C/C++
2014-04-11 11:12:52
Struct和typedef struct的区别和联系
在C和C++中定义结构体类型时有所区别。
1.1 C中定义结构体类型的2种方式:
1> 定义时使用typedef
typedef struct Calendar //声明结构体类型;
{
int year;
int mouth;
int day;
}Date;
此时,Date实际上就是struct Calendar结构体别名,即Date=struct Calendar;
这样就可以使用Date来定义变量了,例如:
Date birthday;
Date *p; //p为指向此结构体类型的数据指针;
2> 不写Calendar的结构体类型声明方式
typedef struct
{
int year;
int mouth;
int day;
}Date;
定义变量: Date birthday;
1.2 C++中声明结构体:
struct Calendar
{
int year;
int mouth;
int day;
};
该结构体定义了结构体类型Calendar;
声明变量: Calendar birthday;
struct Calendar //声明结构体类型;
{
int year;
int mouth;
int day;
}Date;
此时,Date是1个变量,使用时可以直接访问Date.year;
typedef struct Calendar //声明结构体类型;
{
int year;
int mouth;
int day;
}Date;
而此时Date是1个结构体类型,即Date=struct Canlendar;
使用时Date需要先 Date d1;再d1.birthday=2014;完整表示为:
Date d1;
d1.birthday=2014;
typedef struct和struct的区别:
typedef struct tag_MyStruct
{
int num;
long length;
} MyStruct;
上面的tag_MyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。
该结构完成了两个操作:
1) 定义一个新的结构类型
struct tag_MyStruct
{
int num;
long length;
};
分析:tag_MyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedef struct关键字和tag_MyStruct一起,构成了这个结构类型,这个结构都存在。
我们可以用struct tag_MyStruct varName来定义变量,但要注意,使用tag_MyStruct varName来定义变量是不对的,因为struct 和tag_MyStruct合在一起才能表示一个结构类型。
2) typedef为这个新的结构起了一个名字---MyStruct。
typedef struct tag_MyStruct MyStruct;
因此,MyStruct实际上相当于struct tag_MyStruct,我们可以使用MyStruct varName来定义变量。
typedef struct tag_MyStruct { int num; long length; } MyStruct; |
|
声明结构后,定义变量的方式: |
|
C中定义变量的2种方式 |
c++中定义变量的3种方式 |
1)struct tag_MyStruct varName; 2)MyStruct varName; |
1)struct tag_MyStruct varName; 2)MyStruct varName; 3)tag_MyStruct varName; |
笨嘴拙舌,不妥之处烦请指正...