首页 > 代码库 > 结构体的两种定义方式
结构体的两种定义方式
typedef struct 用法小结
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
typedef与结构体结合使用
typedef struct tagMyStruct { int iNum; long lLength; } MyStruct;
这句话实际上完成两个操作:
1、定义一个新的结构类型 tagMyStruct,struct关键字和tagMyStruct一起构成了这个结构类型,不论是否有typedef这个结构都存在。
2、typedef为这个新结构起一个名字MyStruct。
因此MyStruct实际上相当于struct tagMyStruct,我们可以使用struct tagMyStruct来定义变量。
struct在代码中常见的两种形式
struct A { //... }; struct { //... } A;
前者叫做“结构体类型定义”意思是:定义一个名称是“A”的结构体
后者是结构体变量定义,意思是:定义一个名称是“A”的结构体变量,这里的结构体是匿名结构体,无法被直接引用。
在C和C++中struct和typedef struct的区别
在C和C++中有三种定义结构的方法
typedef struct { int data; int text; } S1; //这种方法可以在c或者c++中定义一个S1结构 struct S2 { int data; int text; }; // 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错 struct { int data; int text; } S3; //这种方法并没有定义一个结构,而是定义了一个s3的结构变量,编译器会为s3内存。 void main() { S1 mine1;// OK ,S1 是一个类型 S2 mine2;// OK,S2 是一个类型 S3 mine3;// OK,S3 不是一个类型 S1.data = 5;// ERROR S1 是一个类型 S2.data = 5;// ERROR S2 是一个类型 S3.data = 5;// OKS3是一个变量 }
另外,对与在结构中定义结构本身的变量也有几种写法
struct S6 { S6* ptr; }; // 这种写法只能在C++中使用 typedef struct { S7* ptr; } S7; // 这是一种在C和C++中都是错误的定义 //如果在C中,我们可以使用这样一个“曲线救国的方法“ typedef struct tagS8{ tagS8 * ptr; } S8;
struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同?
其实, 前者是定义了类_x1和_x1的对象实例x1, 后者是定义了类_x2和_x2的类别名x2 。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。