首页 > 编程知识 正文

定义结构体时有下面几种说法,结构体的基本概念

时间:2023-05-04 01:01:41 阅读:259537 作者:2367

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 。

转载于:https://www.cnblogs.com/cjxq/p/3772889.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。