结构体定义 typedef struct 用法详解和用法小结
[常用数据结构和算法]结构体定义typedefstruct用法详解和用法小结
[常用数据结构和算法]结构体定义typedefstruct用法详解和用法小结篇一: 结构体定义typedefstruct用法详解和用法小结typedef是类型定义的意思。
typedef struct是为了使用这个结构体方便。
具体区别在于:若struct node{ }这样来定义结构体的话。
在定义node 的结构体变量时,需要这样写:struct node n;若用typedef,可以这样写:typedef struct node{}NODE; 。
在申请变量时即可这样写:NODEn;其实就相当于NODE 是node 的别名。
区别就在于使用时,是否可以省去struct这个关键字。
1 首先:在C中定义1个结构体类型时如果要用typedef:typedef struct Student{int no;char name[12];}Stu,student;于是在声明变量之际就可:Stu stu1;或者:student stu2; 如果没有typedef即:struct Student{int no;char name[12];}Stu;就必须用struct Student stu1;或者struct Stu stu1;来声明另外这里也可以不写Studenttypedef struct{int no;char name[12];}Stu;2其次:在c++中如果用typedef的话,又会造成区别:struct Student{int no;char name[12];}stu1;//stu1是1个变量typedef struct Student2{int no;char name[12];}stu2;//stu2是1个结构体类型,即stu2是Student2的别名使用时可以直接访问stu1.no但是stu2则必须先定义stu2 s2;然后s2.no=10;篇二: 19常用大数据量、海量数据处理方法总结? 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯这样的一些涉及到海量数据的公司经常会问到。
typedefstruct用法详解和用法小结
typedefstruct用法详解和用法小结第一篇:typedef struct 用法详解和用法小结1.基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。
这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。
2.typedef& 结构的问题当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:typedefstructtagNode { char *pItem;pNodepNext;} *pNode;答案与分析:1、typedef的最简单使用 typedef long byte_4;给已知数据类型long起个新名字,叫byte_4。
2、typedef与结构结合使用typedefstructtagMyStruct { intiNum;long lLength;} MyStruct;这语句实际上完成两个操作: 1)定义一个新的结构类型 structtagMyStruct { intiNum;long lLength;};分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。
我们可以用structtagMyStructvarName来定义变量,但要注意,使用tagMyStructvarName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
2)typedef为这个新的结构起了一个名字,叫MyStruct。
typedef struct 默认值
题目:详解C++中的typedef struct 默认值在C++中,我们经常会看到使用typedef struct来定义结构体类型。
然而,对于typedef struct中的默认值可能有些同学并不太了解。
本文将详细解释C++中typedef struct的默认值,并通过示例代码进行说明。
一、typedef struct的定义和用法在C++中,我们可以使用typedef关键字来给数据类型取一个新的名字。
而在结构体定义中,通过使用typedef struct可以方便我们使用结构体类型。
例如:```typedef struct {int id;char name[20];} Student;```上述代码定义了一个名为Student的结构体类型,其中包含id和name两个成员变量。
二、typedef struct 默认值的概念在C++中,当我们使用typedef struct定义结构体类型时,如果不为结构体成员变量赋值,则成员变量会默认为对应数据类型的默认值。
例如:```typedef struct {int id;char name[20];} Student;```对于上述代码,如果我们定义一个Student类型的变量:```Student stu;```则id的默认值为0,name的默认值为空字符串。
三、typedef struct 默认值的注意事项在使用typedef struct时,需要注意一些细节问题:1. 结构体成员变量如果是指针类型,则默认值为nullptr。
2. 对于自定义数据类型,默认值为该类型的默认构造函数所得到的值。
3. 在使用typedef struct定义结构体类型时,需要注意成员变量的默认值问题,避免出现意外情况。
四、详细示例代码下面通过具体的示例代码来说明typedef struct默认值的问题:```#include <iostream>typedef struct {int id;char name[20];} Student;int main() {Student stu;std::cout << "id: " << stu.id << std::endl; // 输出id的默认值std::cout << "name: " << << std::endl; // 输出name的默认值return 0;}```运行上述代码,会发现id的默认值为0,name的默认值为空字符串。
C C中typedef struct和struct的用法
C/C++中typedef struct和struct的用法xml 代码1.由于对typedef明白得不够,因此从网上摘录了一些资料,整理如下:2.C/C++中typedef struct和struct的用法3.struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同?4.其实, 前者是概念了类_x1和_x1的对象实例x1, 后者是概念了类_x2和_x2的类别名x2 ,5.因此它们在利用进程中是有取别的.请看实例1.6. [知识点]7.结构也是一种数据类型, 能够利用结构变量, 因此, 象其它类型的变量一样, 在利用结构变量时要先对其概念。
8.概念结构变量的一样格式为:9. struct 结构名10. {11.类型变量名;12.类型变量名;13. ...14. } 结构变量;15.结构名是结构的标识符不是变量名。
16.另一种常常利用格式为:17. typedef struct 结构名18. {19.类型变量名;1.类型变量名;2. ...3. } 结构别名;4.另外注意: 在C中,struct不能包括函数。
在C++中,对struct进行了扩展,能够包括函数。
5.======================================================================6.实例1:7.#include <iostream>ing namespace std;9.typedef struct _point{10. int x;11. int y;12. }point; 为何?13.大体说明14.typedef为C语言的关键字,作用是为一种数据类型概念一个新名字。
那个地址的数据类型包括内部数据类型(int,char等)和自概念的数据类型(struct等)。
15.在编程中利用typedef目的一样有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
C语言typedefstruct具体解释
}Stu;
这里也就必须使用Stu stu1来声明对象了。 请看以下的代码:
typedef struct tagMyStruct{ int iNum; long lLength;
} MyStruct;
上面的tagMyStruct是标识符,MyStruct是变量类型。上述代码事实上完毕了两个操作: (1)定义一个结构体:
对于相同的代码。在C和C++中也有不同的理解。例如以下:
typedef struct tagMyStruct{ int iNum; long lLength;
} MyStruct;
在C中。这个结构体声明结构体变量的方式有两种: 1)struct tagMyStruct 变量名。 2)MyStruct 变量名。
struct tagMyStruct{ int iNum; long lLength;
};
tagMyStruct称为tag,即标签。实际上是一个暂时名字。不论是否有typedef structkeyword和tagMyStruct一起。都构成了这个结构体。此时我 们能够使用struct tagMyStruct varName来定义变量。 可是注意。使用tagMyStruct varName来定义变量是不正确的。 由于struct和tagMyStruct合在一起才干表示一个结构体类型。 (2)typedef为这个新的结构起了一个名字,叫MyStruct. typedef struct tagMyStruct MyStruct. 因此MyStruct实际上相当于struct tagMyStruct,我们能够使用MyStruct varName来定义变量。
在C++中: 1)struct tagMyStruct 变量名; 2)MyStruct 变量名。 3)tagMyStruc.html
C C++中typedef struct和struct的用法
C/C++中typedef struct和struct的用法xml 代码1.由于对typedef理解不够,因此从网上摘录了一些资料,整理如下:2.3.C/C++中typedef struct和struct的用法4.5.struct _x1 { ...}x1; 和typedef struct _x2{ ...}x2; 有什么不同?6.7.8.其实, 前者是定义了类_x1和_x1的对象实例x1, 后者是定义了类_x2和_x2的类别名x2 ,9.10.所以它们在使用过程中是有取别的.请看实例1.11.12. [知识点]13.14.结构也是一种数据类型, 可以使用结构变量, 因此, 象其它类型的变量一样, 在使用结构变量时要先对其定义。
15.16. 定义结构变量的一般格式为:17.18. struct 结构名19.20. {21.22. 类型变量名;23.24. 类型变量名;25.26. ...27.28. } 结构变量;29.30. 结构名是结构的标识符不是变量名。
31.32.33.34.另一种常用格式为:35.36.38. typedef struct 结构名39.40. {41.42. 类型变量名;43.44. 类型变量名;45.46. ...47.48. } 结构别名;49.50.51.52.53.54.另外注意: 在C中,struct不能包含函数。
在C++中,对struct进行了扩展,可以包含函数。
55.56.57.58.======================================================================59.60.61.62.实例1: struct.cpp63.64.65.66.#include <iostream>67.ing namespace std;69.70.typedef struct _point{71.72. int x;73.74. int y;75.76. }point; //定义类,给类一个别名77.78.80.struct _hello{81.82. int x,y;83.84. } hello; //同时定义类和对象85.86.87.88.89.90.int main()91.92.{93.94. point pt1;95.96. pt1.x = 2;97.98. pt1.y = 5;99.100.cout<< "ptpt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl;101.102.103.104.//hello pt2;105.106.//pt2.x = 8;107.108.//pt2.y =10;109.110.//cout<<"pt2pt2.x="<< pt2.x <<"pt2.y="<<pt2.y < <endl;111.112.//上面的hello pt2;这一行编译将不能通过. 为什么?113.114.//因为hello是被定义了的对象实例了.115.116.//正确做法如下: 用hello.x和hello.y117.118.119.120.hello.x = 8;121.122.hello.y = 10;123.124.cout<< "hellohello.x=" << hello.x << "hello.y =" <<hello.y <<endl;125.126.127.128.return 0;129.130.}131.132.133.134.135.136.typedef struct与struct的区别137.138. 1. 基本解释139.140.typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。
举例说明c语言中typedef和struct用法。
举例说明c语言中typedef和struct用法。
嘿,朋友们,今天咱们来聊聊C语言里的两个“宝贝”——typedef 和struct。
这两个家伙虽然名字听起来有点高大上,但其实用起来超级接地气,简直就是编程界的“万能钥匙”。
不信?那就跟着我一起,看看它们是如何在我们的代码世界里大显身手的吧!首先说说struct,这家伙就像是咱们生活中的“工具箱”。
你想啊,咱们平时出门,啥都得带点儿,手机、钱包、钥匙,一样都不能少。
在C语言里,有时候咱们也得处理一堆不同类型的数据,比如一个人的姓名、年龄、性别,这些数据得放在一起管理,这时候struct就派上用场了。
举个例子,咱们要定义一个“学生”的结构体,里面包含学生的学号、姓名和成绩。
怎么整呢?简单,就像这样:```cstruct Student {int id;char name[50];float score;};```看,这就是一个“学生工具箱”,里面有三样宝贝:学号(int型)、姓名(字符数组)、成绩(浮点型)。
以后咱们要创建学生信息,直接用这个工具箱就行了,既方便又快捷。
不过,struct虽然好用,但名字有点长,每次写起来都挺费劲的。
这时候,typedef这个“小助手”就闪亮登场了。
typedef就像是给struct起了个“小名”,以后咱们就可以用这个“小名”来代表struct了,是不是很方便?继续上面的例子,咱们给Student结构体起个“小名”叫StudentInfo,怎么整呢?看下面:```ctypedef struct Student {int id;char name[50];float score;} StudentInfo;```注意啊,这里typedef和struct是放在一起的,咱们可以理解为“给struct Student起个小名叫StudentInfo”。
以后,咱们就可以直接用StudentInfo来创建学生信息了,再也不用写长长的struct Student了。
typedef struct 用法
typedef struct 用法
struct 是 C 语言,C++,Java,Objective- C 等面向对象编程语言中提供的一种用来定义自定义数据类型的结构。
它可以用来定义各种数据类型,以便在程序中使用它们。
struct 的用法:
1. 定义自定义数据类型:struct 可以用来定义各种自定义的数据类型,从而使程序中的数据更容易管理。
2. 定义复合类型:struct 可以用来组合各种不同的类型,以便在程序中提供更为灵活的数据处理。
3. 存储结构:struct 可以用来存储一组相关的数据,以便程序中的其他部分能够方便地访问此数据。
4. 封装数据:struct 可以用来封装一些对外不可见的数据,以便把程序的实现部分和用户使用部分分开,使程序更加清晰易读。
5. 传输结构体:struct 可以用来传递数据,以便在不同的程序中进行通信。
6. 定义函数:struct 也可以用来定义新的函数类型,从而可以更好地处理各种复杂的数据结构。
struct 用法中关键在于对数据进行抽象,将数据重新划分为不同的类别,以便更好地处理和管理这些数据。
而程序开发者在使用 struct 时,要特别注意其定义的数据类型要符合实际需求,从而有效地实现代码的功能。
结构体typedef用法
结构体typedef用法
typedef用于给一个已有的数据类型取一个新的名字。
在结构体中,typedef可以用来简化结构体的声明。
以下是结构体typedef的语法:```
typedef struct {
结构体成员1
结构体成员2
...
结构体成员n
}新类型名;
```
例如,下面的代码定义了一个结构体Person和一个新的类型Person_t:
```c
typedef struct {
char name[20];
int age;
} Person_t;
```
这段代码声明了一个结构体类型Person,其中包含了一个字符串
和一个整型。
通过typedef关键字,这个结构体类型被定义为另一个
名字Person_t。
现在可以使用新的类型名Person_t来定义变量,如下所示:
```c
Person_t person1 = {"张三", 18};
```
结构体typedef为我们提供了更加简明的方式来定义结构体类型,并且方便我们在代码中使用该类型。
此外,还可以使用typedef定义
其他类型,比如指针、数组等等。
例如,下面的代码定义了一个名为IntArr_t的整型数组类型:
```c
typedef int IntArr_t[10];
```
这个类型定义将int[10]重新命名为IntArr_t,现在可以用IntArr_t来定义整型数组变量,如下所示:
```c
IntArr_t arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
```。
CC++中的结构体声明:struct和typedefstruct用法
CC++中的结构体声明:struct和typedefstruct⽤法C/C++中的结构体声明: struct 和 typedef struct ⽤法之前⼀直被C/C++中的结构体的定义弄晕,今天终于认认真真整理了⼀次。
结构体的常规定义与创建⽆ typedef 的声明⽅式⾸先常规结构体的定义,你肯定已经⼗分清楚:struct Person{int age;string name;};这⾥Person是你声明的这个结构体的名字,即⼀种类型,如同int之类的。
如果你想声明⼏个Person的变量的话有两种⽅式:// 1. 在声明之后⽴刻创建struct Person {int age;string name;} person_a, person_b;// 这⾥ person_a 都是实际的 variables 啦!// 2. 随后需要的时候再创建,给出C中的定义⽅法struct Person person_c;有 typedef 的声明⽅式在C中,创建结构体都要在前⾯加多⼀个struct,有点累赘。
当然,有简单的办法,就是加上⼀个typedef。
typedef struct Person {int i;string name;} Ren;// 这⾥ Ren 不是 variable, ⽽是⼀个类型名// 通过这种⽅式声明的结构体就可以较为简洁地创建变量Ren person_d;typedef 并没有实际参与到结构体的定义,⽽是仅仅给你创建的结构体起了个外号。
在这个例⼦中 struct Person 的外号就是 Ren其他声明⽅法介绍上⾯介绍的都是⼗分常规的的声明⽅式,也是推荐使⽤的 best practice。
但容易混淆的是⼀些⽐较特殊的声明⽅式中,例如匿名结构体等,实际的效果可能不是那么的直观。
1. 匿名结构体struct {int age;string name;} p1, p2;这⾥p1, p2是实际的变量不是变量类型。
struct在c语言中的用法
struct在c语言中的用法C语言中的struct被称为结构体,它是一种用户自定义的数据类型。
可以将不同类型的数据组合在一起,形成一个大的数据结构,方便程序的管理和调用。
struct的定义方式很简单,可以在定义前加上struct关键字,也可以用typedef来定义,例如:```struct student {char name[20];int age;float score;};typedef struct student stu;```定义了一个名为student的结构体,结构体中包括三个数据项:name、age和score。
可以通过对每个数据成员赋值来定义结构体,例如:```stu s1;strcpy(, "Tom");s1.age = 20;s1.score = 89.5;```也可以通过指针的方式来定义结构体,例如:```stu *s2;s2 = (stu*) malloc(sizeof(stu));strcpy(s2->name, "John");s2->age = 22;s2->score = 92.0;```通过结构体,可以将数据组合在一起,方便程序的管理和调用。
例如,可以定义一个数组来存储多个结构体变量,例如:```stu s[3] = {{"Bob", 19, 87.0},{"Lucy", 18, 92.5},{"Mike", 20, 80.0}};```也可以通过循环遍历结构体数组,打印出每个学生的成绩,例如:```for (int i = 0; i < 3; i++) {printf("%s's score is %.1f\n", s[i].name, s[i].score);}```总之,在C语言中,struct是一个强大而灵活的工具,通过结构体可以组合不同类型的数据,方便程序管理和调用,处理复杂的数据结构问题,优化程序的逻辑结构。
typedefstruct和struct的区别和用法
typedefstruct和struct的区别和⽤法typedef是类型定义的意思,struct是定义结构体的意思,⽽typedef strcut是为这个结构体定义⼀个别名的意思;⽐如:typedef struct 结构名{类型变量名;类型变量名;...} 结构别名;这想当于2步操作:1)、struct 结构名{类型变量名;类型变量名;...} ;2)、typedef struct 结构名结构别名;此时,结构别名 = struct 结构名;因为在C语⾔中,使⽤“struct 结构名{...};”定义⼀个结构的话,必须使⽤“struct 结构名对象名”来定义⼀个对象。
所以为了使⽤的⽅便,我们给这个结构名起来个别名叫“结构别名”,即typedef struct 结构名{类型变量名;类型变量名;...} 结构别名;当我们将上述代码的typedef去掉是,变成下⾯的代码:struct 结构名{类型变量名;类型变量名;...} 结构对象;这表⽰使⽤上述代码定义的是⼀个结构名和该结构明的⼀个结构对象。
⽐如:struct Student{int a;}stu1;//stu1是⼀个变量typedef struct Student2{int a;}stu2;//stu2是⼀个结构体类型使⽤时可以直接访问stu1.a,但是stu2则必须先 stu2 s2,然后 s2.a=10;上述区别都是在C语⾔中。
在C++中,如果定义了下⾯的代码:struct tagPOINT1{int x;int y;};则可以直接写:结构名对象名,即:tagPOINT1 p1来定义对象p1;但是在C语⾔中必须加上struct,即:struct tagPOINT1 p1来定义对象p1;此外,在C中,struct不能包含函数。
在C++中,对struct进⾏了扩展,可以包含函数。
C语言基础之struct
C语⾔基础之struct基础知识(待补充)typedef struct和struct(C和C++中的使⽤)typedef struct OLNode { int i,j; int data; OLNode *right,*down;}OLNode,*OLink; //结构的对象OLNode, 指向结构的指针*OLink//可以这样写struct OLNode{};OLNode OLNode, *OLink;总结3点1.C语⾔中结构体struct的声明必须配合typedef,struct后跟的名字Name1称为标签,此时花括号后跟的名字Name2相当于类型别名:(struct Name1) == Name2;2.C++中struct可单独声明新的结构体类型,此时struct后⾯跟的名字Name1是标签,可单独作为新类型名字使⽤来声明和初始化对象。
若此时花括号后跟name2则相当于新声明的类型变量,可直接初始化,或后续初始化:Name1 name2;3.C++中也可typedef 配合struct使⽤,此时与C语⾔相似。
struct后⾯跟的Name1 是标签,花括号后⾯若有Name2则相当于新类型别名:(struct Name1) == Name1 == Name2。
具体分三块来讲述:C和C++中struct的⼀般性声明1. 在C中定义⼀个结构体类型要⽤typedef:typedef struct Student {int a;} Stu;struct Student stu1;//ORStu stu1; //如果没有typedef就必须⽤上⾯的struct Student stu1;来声明这⾥的Stu实际上就是struct Student的别名:Stu == struct Student。
另外这⾥也可以不写Student,于是也不能struct Student stu1;了,必须是Stu stu1;typedef struct {int a;} Stu;Stu stu1;2. C++⾥很简单,直接struct Student { int a;};Student stu2;C++中struct与typdef struct声明的区别struct Student { int a;} stu1; //stu1是⼀个变量typedef struct Student2 { int a;} stu2; //stu2是⼀个结构体类型:stu2 == struct Student//使⽤时可以直接访问:stu1.a = 10;//但是stu2则必须先:stu2 s2;//然后s2.a = 10;C语⾔中typedef struct的本质typedef struct { int num; int age;} aaa, bbb, ccc;观察编译器(VC6)的理解,这相当于typedef struct {int num;int age;} aaa;typedef aaa bbb;typedef aaa ccc;也就是说aaa, bbb, ccc三者都是结构体类型。
struct 和 typedef struct 用法 -回复
struct 和typedef struct 用法-回复struct 和typedef struct 是C 语言中定义结构体的两种方式。
结构体是一种自定义的数据类型,可用于组织不同类型的数据成员,从而形成一种更为复杂的数据结构。
在本文中,我将逐步解释struct 和typedef struct 的用法,并说明它们之间的区别和应用场景。
首先,我们来看一下struct 的用法。
struct 关键字用于定义一个结构体,其语法如下:struct [结构体名] {[数据成员];[数据成员];...};其中,[结构体名] 是可选的,如果省略,则无法通过该名称来创建结构体实例。
[数据成员] 是结构体中的成员变量,用于存储不同类型的数据。
例如,我们可以定义一个表示学生的结构体如下:struct Student {char name[20];int age;float score;};在上面的例子中,我们定义了一个名为Student 的结构体,它包含了一个用于存储学生姓名的字符数组name,一个用于存储学生年龄的整型变量age,以及一个用于存储学生成绩的浮点型变量score。
一旦定义了结构体,我们可以使用该结构体来创建结构体变量。
例如,我们可以声明一个名为stu 的Student 结构体变量,并为其成员变量赋值如下:struct Student stu;strcpy(, "John");stu.age = 18;stu.score = 90.5;在上述代码中,我们通过结构体变量stu 来访问其成员变量,可以使用`.`运算符将成员变量名添加到结构体变量名之后,从而进行读取或赋值操作。
另一种定义结构体的方式是使用typedef struct。
关键字typedef 用于创建类型别名,它可以为已定义的类型创建一个新的名称。
结合struct 关键字,我们可以使用typedef 来定义结构体类型。
此时,结构体的定义和创建方式如下:typedef struct [结构体名] {[数据成员];[数据成员];...} [类型别名];例如,我们可以使用typedef struct 来定义一个名为Student 的结构体类型,并为其创建别名Stu 如下:typedef struct Student {char name[20];int age;float score;} Stu;在上面的例子中,我们定义了一个名为Student 的结构体类型,并将其别名定义为Stu。
typedef和struct的用法
typedef和struct的用法typedef和struct的用法1. typedef的作用•typedef是 C语言的一个关键字,用于为已有的数据类型定义别名。
•利用typedef,我们可以方便地定义一个自定义的类型名称,提高代码的可读性。
2. typedef的语法typedef type new_type;其中,type是已有的数据类型,new_type是自定义的类型名称。
3. typedef的示例typedef int Integer;上述代码将int类型定义为一个新的类型Integer,以后可以直接使用Integer代替int。
4. struct的作用•struct是 C语言中用于定义自定义的数据结构的关键字。
•利用struct,我们可以将多个不同类型的数据组合在一起,形成一个新的数据类型。
5. struct的语法struct 结构体名 {类型成员名1;类型成员名2;// ...};其中,结构体名是自定义的结构体名称,类型是结构体中每个成员的数据类型,成员名是结构体中各个成员的名称。
6. struct的示例struct Person {char name[20];int age;float height;};上述代码定义了一个名为Person的结构体,包含了姓名、年龄和身高三个成员。
7. typedef与struct的结合使用•typedef可以与struct结合使用,提高代码的可读性。
typedef struct {char name[20];int age;float height;} Person;上述代码通过typedef定义了一个匿名结构体,并将其命名为Person,省略了结构体名,使得创建Person类型的变量更加方便。
8. typedef和struct的进阶用法•typedef还可以与指针结合使用,进一步增强代码的灵活性。
typedef struct Node {int data;struct Node *next;} Node;上述代码中,将结构体Node定义为一个包含整型数据和指向自身类型的指针的结构体。
C语言如何定义结构体
C语言如何定义结构体1. struct与typedef struct区别struct是结构体的关键字,用来声明结构体变量如struct student{ char num[10];char name[20];int age;};struct student stu[10]来声明一个结构体数组-------------------------------------------------------------------------------typedef是用来定义新的类型名来代替已有的类型名,可将上面的结构体定义为typedef struct student{ char num[10];char name[20];int age;}stud;也就是说,将原来的struct student 重新定义为 stud;可以直接用 stud stu[10]来声明一个结构体数组2. 结构体的自引用 / 相互引用结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。
结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。
1. 自引用结构体(1.1) 不使用typedef时struct tag_1{struct tag_1 A; /* 结构体 */int value;};这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是结构体,依次下去,无线循环。
在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。
正确的方式:(使用指针):struct tag_1{struct tag_1 *A; /* 指针 */int value;};由于指针的长度是确定的(在32位机器上指针长度为4),所以编译器能够确定该结构体的长度。
(1.2) 使用typedef 时typedef struct {int value;NODE *link; /* 虽然也使用指针,但这里的问题是:NODE尚未被定义 */} NODE;这里的目的是使用typedef为结构体创建一个别名NODEP。
typedefstruct在c语言中用法
typedefstruct在c语言中用法在C语言中,typedef struct是一种用来定义结构体的方法,它可以为结构体类型起一个新的类型名,使结构体具有更方便和易用的称呼。
在一些情况下,typedef struct语句可以提高程序的可读性和可维护性。
typedef是C语言中的一个关键字,它可以用来为各种类型定义新的类型名,包括结构体。
而struct是一个关键字,用于定义结构体类型。
结构体是一种自定义的数据类型,它可以包含多个不同类型的数据成员,并可以通过一个名称引用它们。
下面是typedef struct的语法形式:```data_member1;data_member2;...data_memberN;} type_name;```其中,data_member1, data_member2等是结构体的数据成员,它们可以是任何C语言中的合法数据类型,如整数、浮点数、字符、指针等等。
type_name是新定义的结构体类型的名称。
通过typedef struct定义的结构体类型,可以像其他数据类型一样使用,例如声明变量、定义函数参数、定义函数返回值等。
下面是使用typedef struct定义结构体类型的例子:```int x;int y;} Point;```在上面的例子中,我们定义了一个名为Point的结构体类型,它包含两个整型数据成员x和y。
此时,我们就可以像使用其他数据类型一样使用Point类型了,比如声明Point类型的变量:```Point p1;```此时,p1就是一个Point类型的变量,可以使用.操作符访问结构体的成员,例如:```p1.x=10;p1.y=20;```上面的代码给p1的成员x和y分别赋值为10和20。
```struct Nodeint data;Node* next;};```在上面的例子中,首先声明了一个名为Node的结构体类型。
然后在结构体的定义中使用Node* next,表示结构体中的一个成员指向Node类型的指针。
c语言typedef struct用法
在C语言中,typedef和struct是两个重要的关键字,常用于创建自定义的数据类型。
以下是它们的基本用法:首先,我们可以使用struct关键字来定义一个结构体:c复制代码struct Student {char name[50];int age;};上述代码定义了一个名为Student的结构体,它有两个成员:一个名为name的字符数组和一个名为name 的整数。
虽然我们已经定义了Student结构体,但每次声明该类型的变量时,我们都需要使用struct关键字。
为了避免这种情况,我们可以使用typedef为结构体定义一个别名:c复制代码typedef struct Student {char name[50];int age;} Student_t;现在,我们可以直接使用Student_t来声明变量,而无需每次都使用struct关键字:c复制代码Student_t student1;student1.age = 20;strcpy(, "John Doe");我们还可以使用typedef为结构体的指针定义别名:c复制代码typedef struct Student *Student_ptr;这样,我们就可以直接使用Student_ptr来声明指向Student结构体的指针:c复制代码Student_ptr student_ptr = malloc(sizeof(struct Student));student_ptr->age = 20;strcpy(student_ptr->name, "John Doe");我们还可以使用typedef定义匿名结构体,即没有名字的结构体:c复制代码typedef struct {char name[50];int age;} Student_t;在这种情况下,我们不能直接使用struct Student来引用这个结构体,因为它没有名字。
TypedefStruct用法详解
TypedefStruct⽤法详解Typedef Struct ⽤法详解⼀、typedef的⽤法在C/C++语⾔中,typedef常⽤来定义⼀个标识符及关键字的别名,它是语⾔编译过程的⼀部分,但它并不实际分配内存空间。
实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“⾮直观性”等缺点。
⼆、#define的⽤法#define为⼀宏定义语句,通常⽤它来定义常量(包括⽆参量与带参量),以及⽤来实现那些“表⾯似和善、背后⼀长串”的宏,它本⾝并不在编译过程中进⾏,⽽是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:#define INT int#define TRUE 1#define Add(a,b) ((a)+(b));#define Loop_10 for (int i=0; i<10; i++)⽤法详解:1. #define 的变体,即 #ifndef,可以防⽌头头⽂件的重复引⽤。
#ifdef和 #define组合,⼀般⽤于头⽂件中,⽤以实现防⽌多个⽂件对此同⼀个头⽂件的重复引⽤.实际使⽤中,即使你的头⽂件暂时没有被多个⽂件所引⽤,为了增加程序可读性,移植性,健壮性等,还是最好都加上。
其⽤法⼀般为:#ifndef <标识>#define <标识>……… // include or define sth.#endif<标识>在理论上来说可以是⾃由命名的,但每个头⽂件的这个“标识”都应该是唯⼀的 to void the definition duplication。
but normallz, 标识的命名规则⼀般是头⽂件名全⼤写,前后加下划线,并把⽂件名中的“.”也变成下划线,如:stdio.h对应的就是:#ifndef _STDIO_H_#define _STDIO_H_……… // include or define sth.#endif1. #define的变体,即#ifdef,可以实现加⼊⾃⼰需要的模块(源⽂件)[例⼦] 在源⽂件中加⼊#ifdef MYSELF_H#include "myself.c"#endif可以实现在源⽂件中加⼊myself.c的代码,将其实现的功能加进来, 即加⼊了myself模块。
CC++中typedefstruct和struct的用法
C/C++中t y p e d e f s t r u c t和s t r u c t的用法xml代码1.由于对typedef理解不够,因此从网上摘录了一些资料,整理如下:2.C/C++中typedefstruct和struct的用法3.struct_x1{...}x1;和typedefstruct_x2{...}x2;有什么不同4.其实,前者是定义了类_x1和_x1的对象实例x1,后者是定义了类_x2和_x2的类别名x2,5.所以它们在使用过程中是有取别的.请看实例1.6.知识点7.结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样,在使用结构变量时要先对其定义;8.定义结构变量的一般格式为:9.struct结构名10.{11.12.类型变量名;13.类型变量名;14....15.}结构变量;16.结构名是结构的标识符不是变量名;17.另一种常用格式为:18.typedefstruct结构名19.{20.21.类型变量名;22.类型变量名;23....24.}结构别名;25.另外注意:在C中,struct不能包含函数;在C++中,对struct进行了扩展,可以包含函数;26.======================================================================27.实例1:struct.cpp28.include<iostream>ingnamespacestd;30.typedefstruct_point{31.intx;32.inty;33.}point;//定义类,给类一个别名34.struct_hello{35.intx,y;36.}hello;//同时定义类和对象37.intmain38.{39.pointpt1;40.pt1.x=2;41.pt1.y=5;42.cout<<"ptpt1.x="<<pt1.x<<"pt.y="<<pt1.y<<endl;43.//hellopt2;44.//pt2.x=8;45.//pt2.y=10;46.//cout<<"pt2pt2.x="<<pt2.x<<"pt2.y="<<pt2.y<<endl;47.//上面的hellopt2;这一行编译将不能通过.为什么48.//因为hello是被定义了的对象实例了.49.//正确做法如下:用hello.x和hello.y50.hello.x=8;51.hello.y=10;52.cout<<"hellohello.x="<<hello.x<<"hello.y="<<hello.y<<endl;53.return0;54.}55.typedefstruct与struct的区别56.1.基本解释57.typedef为C语言的关键字,作用是为一种数据类型定义一个新名字;这里的数据类型包括内部数据类型int,char等和自定义的数据类型struct等;58.在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明;59.至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述;60.2.typedef&结构的问题61.当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢莫非C语言不允许在结构中包含指向它自己的指针吗请你先猜想一下,然后看下文说明:62.typedefstructtagNode63.{64. charpItem;65. pNodepNext;66.}pNode;67.答案与分析:68.1、typedef的最简单使用69.typedeflongbyte_4;70. 给已知数据类型long起个新名字,叫byte_4;71.2、typedef与结构结合使用72.typedefstructtagMyStruct73.{74. intiNum;75. longlLength;76.}MyStruct;77.这语句实际上完成两个操作:78. 1定义一个新的结构类型79.structtagMyStruct80.{81. intiNum;82. longlLength;83.};84. 分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在;85. 我们可以用structtagMyStructvarName来定义变量,但要注意,使用tagMyStructvarName来定义变量是不对的,因为struct和tagMyStruct合在一起才能表示一个结构类型;86. 2typedef为这个新的结构起了一个名字,叫MyStruct;87.typedefstructtagMyStructMyStruct;88. 因此,MyStruct实际上相当于structtagMyStruct,我们可以使用MyStructvarName来定义变量;89. 答案与分析90. C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用;91. 根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode;92. 解决这个问题的方法有多种:93.1、94.typedefstructtagNode95.{96. charpItem;97. structtagNodepNext;98.}pNode;99.2、100.typedefstructtagNodepNode;101.structtagNode102.{103.charpItem;104.pNodepNext;105.};106.注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字;C语言编译器支持这种做法;107.3、规范做法:108.structtagNode109.{110.charpItem;111.structtagNodepNext;112.};113.typedefstructtagNodepNode;114.C++中typedef关键字的用法115.Typedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法;不管怎样,使用typedef能为代码带来意想不到的好处,通过本文你可以学习用typedef避免缺欠,从而使代码更健壮;116.typedef声明,简称typedef,为现有类型创建一个新的名字;比如人们常常使用typedef来编写更美观和可读的代码;所谓美观,意指typedef能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性;本文下面将竭尽全力来揭示typedef强大功能以及如何避免一些常见的陷阱;117.如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法118.使用typedefs为现有类型创建同义字;定义易于记忆的类型名119.typedef使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图;类型出现在所声明的变量名字中,位于''typedef''关键字右边;例如:typedefintsize;120.此声明定义了一个int的同义字,名字为size;注意typedef并不创建新的类型;它仅仅为现有类型添加一个同义字;你可以在任何需要int的上下文中使用size:voidmeasuresizepsz;121.sizearray4;122.sizelen=file.getlength;123.std::vector<size>vs;124.typedef还可以掩饰符合类型,如指针和数组;例如,你不用象下面这样重复定义有81个字符元素的数组:charline81;125.chartext81;126.定义一个typedef,每当要用到相同类型和大小的数组时,可以这样:typedefcharLine81;127.Linetext,secondline;128.getlinetext;129.同样,可以象下面这样隐藏指针语法:typedefcharpstr;130.intmystrcmppstr,pstr;131.这里将带我们到达第一个typedef陷阱;标准函数strcmp有两个‘constchar'类型的参数;因此,它可能会误导人们象下面这样声明mystrcmp:intmystrcmpconstpstr,constpstr;132.这是错误的,按照顺序,‘constpstr'被解释为‘charconst'一个指向char的常量指针,而不是‘constchar'指向常量char的指针;这个问题很容易解决:typedefconstcharcpstr;133.intmystrcmpcpstr,cpstr;//现在是正确的134.记住:不管什么时候,只要为指针声明typedef,那么都要在最终的typedef名称中加一个const,以使得该指针本身是常量,而不是对象;代码简化135.上面讨论的typedef行为有点像define宏,用其实际类型替代同义字;不同点是typedef在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换;例如:typedefintPFconstchar,constchar;136.这个声明引入了PF类型作为函数指针的同义字,该函数有两个constchar类型的参数以及一个int类型的返回值;如果要使用下列形式的函数声明,那么上述这个typedef 是不可或缺的:PFRegisterPFpf;137.Register的参数是一个PF类型的回调函数,返回某个函数的地址,其署名与先前注册的名字相同;做一次深呼吸;下面我展示一下如果不用typedef,我们是如何实现这个声明的:intRegisterintpfconstchar,constchar138.constchar,constchar;139.很少有程序员理解它是什么意思,更不用说这种费解的代码所带来的出错风险了;显然,这里使用typedef不是一种特权,而是一种必需;持怀疑态度的人可能会问:"OK,有人还会写这样的代码吗",快速浏览一下揭示signal函数的头文件<csinal>,一个有同样接口的函数;typedef和存储类关键字storageclassspecifier140.这种说法是不是有点令人惊讶,typedef就像auto,extern,mutable,static,和register一样,是一个存储类关键字;这并是说typedef会真正影响对象的存储特性;它只是说在语句构成上,typedef声明看起来象static,extern等类型的变量声明;下面将带到第二个陷阱:typedefregisterintFAST_COUNTER;//错误141.编译通不过;问题出在你不能在声明中有多个存储类关键字;因为符号typedef已经占据了存储类关键字的位置,在typedef声明中不能用register或任何其它存储类关键字;促进跨平台开发142.typedef有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫REAL的浮点类型,在目标机器上它可以i获得最高的精度:typedeflongdoubleREAL;143.在不支持longdouble的机器上,该typedef看起来会是下面这样:typedefdoubleREAL;144.并且,在连double都不支持的机器上,该typedef看起来会是这样:、typedeffloatREAL;145.你不用对源代码做任何修改,便可以在每一种平台上编译这个使用REAL类型的应用程序;唯一要改的是typedef本身;在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现;不是吗标准库广泛地使用typedef来创建这样的平台无关类型:size_t,ptrdiff和fpos_t就是其中的例子;此外,象std::string和std::ofstream这样的typedef还隐藏了长长的,难以理解的模板特化语法,例如:basic_string<char,char_traits<char>,allocator<char>>和basic_ofstream<char,char_traits<char>>;146.typedef&define的问题有下面两种定义pStr数据类型的方法,两者有什么不同哪一种更好一点typedefcharpStr;147.definepStrchar;148.答案与分析:149.通常讲,typedef要比define要好,特别是在有指针的场合;请看例子:typedefcharpStr1;150.definepStr2char;151.pStr1s1,s2;152.pStr2s3,s4;153.在上述的变量定义中,s1、s2、s3都被定义为char,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于define只是简单的字符串替换而typedef则是为一个类型起新名字; define用法例子:definefxxx154.main155.{156.inta=6,b=2,c;157.c=fa/fb;158.printf"%d\\n",c;159.}160.以下程序的输出结果是:36;161.因为如此原因,在许多C语言编程规范中提到使用define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:definefxxx 当然,如果你使用typedef就没有这样的问题;162. 4.typedef&define的另一例下面的代码中编译器会报一个错误,你知道是哪个语句错了吗163.typedefcharpStr;164.charstring4="abc";165.constcharp1=string;166.constpStrp2=string;167.p1++;168.p2++;169.答案与分析:170.是p2++出错了;这个问题再一次提醒我们:typedef和define不同,它不是简单的文本替换;上述代码中constpStrp2并不等于constcharp2;constpStrp2和constlongx本质上没有区别,都是对变量进行只读限制,只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已;因此,constpStrp2的含义是:限定数据类型为char的变量p2为只读,因此p2++错误; define与typedef引申谈171.1define宏定义有一个特别的长处:可以使用ifdef,ifndef等来进行逻辑判断,还可以使用undef来取消定义;172.2typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内取决于此变量定义的位置,而宏定义则没有这种特性;173. 5.typedef&复杂的变量声明174.在编程实践中,尤其是看别人代码的时候,常常会遇到比较复杂的变量声明,使用typedef作简化自有其价值,比如:175.下面是三个变量的声明,我想使用typdef分别给它们定义一个别名,请问该如何做>1:inta5int,char;176.>2:voidb10void;177.>3.doubepa9;178.答案与分析:对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了;>1:inta5int,char;179.//pFun是我们建的一个类型别名180.typedefintpFunint,char;181.//使用定义的新类型来声明对象,等价于inta5int,char;182.pFuna5;>2:voidb10void;183.//首先为上面表达式蓝色部分声明一个新类型184.typedefvoidpFunParam;185.//整体声明一个新类型186.typedefvoidpFunpFunParam;187.//使用定义的新类型来声明对象,等价于voidb10void;188.pFunb10;>3.doubepa9;189.//首先为上面表达式蓝色部分声明一个新类型190.typedefdoublepFun;191.//整体声明一个新类型192.typedefpFunpFunParam9;193.//使用定义的新类型来声明对象,等价于doubepa9;194.pFunParampa;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同?
其实, 前者是定义了类_x1和_x1的对象实例x1, 后者是定义了类_x2和_x2的类别名x2 ,
所以它们在使用过程中是有取别的.请看实例1.
[知识点]
结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
而在C++中,则可以直接写:结构名 对象名,即:
tagPOINT1 p1;
估计某人觉得经常多写一个struct太麻烦了,于是就发明了:
typedef struct tagPOINT
}aaa;
typedef aaa bbb;
typedef aaa ccc;
也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。
第四篇:C/C++中typedef struct和struct的用法
}; 的方法,使用时就必须用 struct xxx var 来声明变量,而使用
typedef struct
{
}的方法 就可以写为 xxx var;
不过在C++中已经没有这回事了,无论你用哪一种写法都可以使用第二种方式声明变量,这个应该算是C语言的糟粕。
用法小结
第一、四个用途
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,
// 和一个字符变量;
以下则可行:
typedef char* PCHAR; // 一般用大写
PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针
定义结构变量的一般格式为:
struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构变量;
结构名是结构的标识符不是变量名。
另一种常用格式为:
typedef struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构别名;
另外注意: 在C中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。
{
int a;
}stu1;//stu1是一个变量
typedef struct Student2
{
int a;
}stu2;//stu2是一个结构体类型
使用时可以直接访问stu1.a
但是stu2则必须先 stu2 s2;
然后 s2.a=10;
===========================================
结构体定义 typedef struct 用法详解和用法小结
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。
具体区别在于:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;
struct Student
{
int a;
} stu;
typedef struct Student2
{
int a;
}stu2;
A:
事实上,这个东西是从C语言中遗留过来的,typedef可以定义新的复合类型或给现有类型起一个别名,在C语言中,如果你使用
struct xxx
{
int x;
int y;
}point; //定义类,给类一个别名
struct _hello{
int x,y;
} hello; //同时定义类和对象
int main()
{
point pt1;
pt1.x = 2;
pt1.y = 5;
cout<< "ptpt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl;
//正确做法如下: 用hello.x和hello.y
hello.x = 8;
hello.y = 10;
cout<< "hellohello.x=" << hello.x << "hello.y=" <<hello.y <<endl;
return 0;
}
第五篇:问答
Q: 用struct和typedef struct 定义一个结构体有什么区别?为什么会有两种方式呢?
======================================================================
实例1: struct.cpp
#include <iostream>
using namespace std;
typedef struct _point{
//llo pt2;
//pt2.x = 8;
//pt2.y =10;
//cout<<"pt2pt2.x="<< pt2.x <<"pt2.y="<<pt2.y <<endl;
//上面的hello pt2;这一行编译将不能通过. 为什么?
//因为hello是被定义了的对象实例了.
3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
如果在c程序中我们写:
typedef struct
{
int num;
int age;
}aaa,bbb,ccc;
这算什么呢?
我个人观察编译器(VC6)的理解,这相当于
typedef struct
{
int num;
int age;
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候
或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。
区别就在于使用时,是否可以省去struct这个关键字。
第三篇:struct和typedef struct
分三块来讲述:
1 首先:
在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
虽然:
char *pa, *pb;
也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。
用途二:
用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student stu1;了)
typedef struct
{
int a;
}Stu;
但在c++里很简单,直接
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2;
===========================================
2其次:
在c++中如果用typedef的话,又会造成区别:
struct Student