barriers / 阅读 / 详情

Struct、Class有什么不同之处?

2023-08-03 19:11:40
共1条回复
瑞瑞爱吃桃

首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:

(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;

(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。

除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:

(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;

(2)都可以有一大堆public/private/protected修饰符在里边;

(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:Aa={1,2,3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。

(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。

(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。

(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。

最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

相关推荐

struct在c语言中是什么意思?

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。例子:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //所在学习小组float score; //成绩};stu为结构体名,它包含了5个成员,分别是name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。扩展资料结构体变量——既然结构体是一种数据类型,那么就可以用它来定义变量。例如:struct stu stu1, stu2;定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
2023-08-03 14:21:101

结构体struct简单理解

结构体(struct):是一种复合数据类型,结构类型。 一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 后两种是通过结构体变量指针来引用的结构体变量中的成员,第2种在* pStruct上加上小括号的原因是因为要提升 ”* pStruct“ 的运算优先级,因为在默认情况 . 运算符的优先级是比*运算符的优先级要高的。 个人比较喜欢用"->指向运算符"来引用结构体中的成员 结构体内存对齐为两个原则: 原则 1. 前面的地址必须是后面的地址正数倍,不是就补齐。 原则 2. 整个Struct的地址必须是最大字节的整数倍。 我们可以看到,MyStruct中有5个成员,如果直接相加的话大小应该是16,但在32位MSVC里它的sizeof结果是32。 之所以结果出现偏差,为了保证这个结构体里的每个成员都应该在它对齐了的内存位置上,而在某些位置插入了Padding。 下面我们尝试考虑内存对齐,来计算一下这个结构体的大小。首先,我们可以假设MyStruct的整体偏移从0x00开始,这样就可以暂时忽略MyStruct本身的对齐。这时,结构体的整体内存分布如下图所示: 我们可以看到,char和int之间;short和long long之间,为了保证成员各自的对齐属性,分别插入了一些Padding。 因此整个结构体会被填充得看起来像这样: 注意到上面加了Padding的示意结构体里,e的后面还跟了7个字节的填充。这是因为结构体的整体大小必须可被对齐值整除,所以“char e”的后面还会被继续填充7个字节好让结构体的整体大小是8的倍数32。 参考: 关于内存对齐的那些事
2023-08-03 14:21:281

C语言中struct是个什么意思 怎么用 能不能通俗点说

结构体。就是定义一系列变量的集合例如:struct test{ int a; int b;};使用的时候:test t;t.a = 1;t.b = 2;
2023-08-03 14:21:392

struct :c语言中的这个是什么意思啊

结构
2023-08-03 14:22:135

结构体定义是什么?

结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。C语言提供了关键字struct来标识所定义的结构体类型。扩展资料关键字struct和结构体名组合成一种类型标识符,其地位如同通常的int、char等类型标识符,其用途就像 int 类型标识符标识整型变量一样可以用来定义结构体变量。定义变量以后,该变量就可以像定义的其他变量一样使用了;成员又称为成员变量,它是结构体所包含的若干个基本的结构类型,必须用“{}”括起来,并且要以分号结束,每个成员应表明具体的数据类型。
2023-08-03 14:22:431

数据结构 -- 结构体Struct

在 C 语言中,可以使用结构体( Struct )来存放一组不同类型的数据。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员( Member )。结构体的定义形式为: 结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间。结构体变量才包含了实实在在的数据,需要内存空间来存储。 stu 为结构体名,里面包含name、num、age、group、score这5个成员。 stu1 和 stu2 则为两个stu类型的结构体变量。 直接将变量放在结构体的最后即可。 如上所示,在 stu 结构体里还定义了『结构体变量sub1』和『结构体sub2』,由于 sub2 没有定义变量,所以其内部成员 score 即为母结构体stu的成员变量。 使用点号 . 获取结构体变量的单个成员,然后再进行赋值操作。 也可以在定义结构体变量时整体赋值: 结构体中各成员在内存中是按顺序依次存储的,成员之间不互相影响,各占用不同的内存空间。结构体变量占用的内存大于等于所有成员占用的内存的总和,因为成员在存储时需要遵循结构体的内存对齐规则,成员之间可能会存在裂缝。 先来看看结构体的内存对齐规则: 看完内存对齐规则是不是感觉有点绕?不急,接下来通过分析具体例子来理解这个规则。 示例1:含有多种数据类型成员 输出结果分析: 根据上面的分析可知,struct1的成员总共需要18字节内存,根据规则3,struct1的内存大小必须是8(double a)的整数倍,所以最后内存大小为24。 示例2:交换成员位置 这次在示例1中struct的基础上交换了成员b和c的位置,输出结果就不一样了,分析如下: 根据上面的分析可知,struct2的成员总共需要16字节内存,根据规则3,struct2的内存大小必须是8(double a)的整数倍,所以最后内存大小为16。 示例3:结构体嵌套结构体 直接在struct1里加上一个struct2成员,然后输出内存大小 从之前struct1的分析可知,a、b、c、d实际占用18字节(位置0-17),那成员e就需要从位置18开始存放。由于e是个结构体,根据规则2, 当结构体作为成员时,需要从其内部最u2f24元素所占内存u2f24u2f29的整数倍地址开始存储 。结构体e中内存占用最大的元素是 double a ,为8字节,所以e就需要从8的整数倍地址开始存储,即后移到位置24开始存储,e本身占用16字节内存,所以存放位置是24-39。 根据上面的分析可知,struct1的成员总共需要40字节内存,根据规则3,struct1的内存大小必须是8(double a)的整数倍,所以最后内存大小为40。 1. 数据结构 -- 共用体Union 2. 数据结构 -- 位域
2023-08-03 14:23:071

struct在c语言中是什么意思

struct在c语言中的意思是结构体,是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。在c语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在c语言中,结构体不能包含函数。c语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐。C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%到20%。因此,C语言可以编写系统软件。
2023-08-03 14:23:141

struct 在c语言中什么意思

结构类型
2023-08-03 14:23:393

C语言结构体Struct怎么使用?

Left和Right是结构体指针,指向另一个结构体的地址。Balance、Number、Value是数据存储的部分。这种结构体可以用在双向链表、二叉树等结构。
2023-08-03 14:23:525

Struct是什么数据类型

struct,C语言结构体。通俗讲就是打包封装,把一些有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量。在实际问题中,一组数据往往具有不同的数据类型。例如在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型,因为数组中各元素的类型和长度都必须一致,以便于编译系统处理,所以不能用一个数组来存放这一组数据,为了解决这个问题,C语言中就给出了这种构造数据的类型“结构”,它相当于其它高级语言中的记录。
2023-08-03 14:24:231

c语言struct是什么意思

struct是定义结构的,可以查查联合体的用法,你这里定义了一个叫node的结构体指针,代码不全,包含两个信息,指针所指的数据,和下一节点的指针,用处应该是链表的时候记录链表数据的,程序结果是输出链表数据,结果是2,4,6
2023-08-03 14:24:312

C++ 中struct具体是什么意思?

定义类的格式为 class A{}; 定义结构体的格式为 struct A{}; 明白了把
2023-08-03 14:24:404

C++ 中“struct”是什么意思?

struct是一个结构体。大概的意思就比如: struct time{ int h; int m; int s;}上面就是一个结构体了。这是一个我们自已定意的一个数据类型。如 int ,float ,long等都是数据类型这些都是系统自带的。
2023-08-03 14:24:541

C语言中typedef struct和struct区别

看了最佳答案,解释一下第三个用 text1 或 text2 代替这一串:struct test{int x;int y;}这时并没有定义一个结构体,但是接下来定义一个上面这样的结构体就可以写成这样:text1 a;或text2 a;其中a是结构体变量名。
2023-08-03 14:25:036

Struct、Class有什么不同之处?

首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;(2)都可以有一大堆public/private/protected修饰符在里边;(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:Aa={1,2,3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。
2023-08-03 14:25:251

C语言结构体中struct和typedef struct有什么区别?

C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同。一、声明不同1、struct:struct可以直接使用结构体名字声明结构体。2、typedef struct:typedef struct的为。修饰结构体,结构体有了别名,通过结构体别名声明结构体。二、访问不同1、struct:struct定义的结构体变量,可直接访问结构体成员。2、typedef struct:typedef struct定义的结构体变量,不可直接访问结构体成员,必须显式的通过结构体变量来访问成员。三、重新定义不同1、struct:想重新定义struct结构体的话,必须重写整个结构体。2、typedef struct:想重新定义typedef struct结构体的话,可以通过别名来继承结构体进行重新定义。
2023-08-03 14:25:331

C#中struct和class的区别详解

struct是一种数据结构的实现体,struct里的变量叫数据,class内的变量叫成员。struct更体现出一种数据机构而不是类的特性。 主要区别在于访问控制。 struct 是public 。 class是需要申明public 或者 private的 比如:struct A //定义一个struct{ int n1; int n2; int n3;};A a={5, 7,9}; //定义时直接赋值 struct 换成 class 就会报错 ,换成public class 可以正常运行
2023-08-03 14:25:582

c语言中关于结构体类型的定义

typedef的新名字
2023-08-03 14:26:105

什么是结构体变量

先说一下结构体吧,结构体是包含几个不同类型变量(相同也行),如struct jgt{ int a; char b; float c;};现在jgt就是一个结构体类型,可以用他来定义变量,作用有像int 一样。如:jgt g;g就是结构体变量。
2023-08-03 14:26:323

struct是什么意思在C语言程序中?

结构类型定义和结构变量说明  在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。  “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构既是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。一、结构的定义定义一个结构的一般形式为: struct 结构名 { 成员表列 };
2023-08-03 14:26:412

struct node啥意思

网络构架中的节点node(结点):网络连接的端点,或两条(或多条)线路的连接点.结点可以是处理器、控制器或工作站.结点随其功能不同而各不相同,他们可以通过链路互联在一起,在网络中用作控制点.节点是指一台电脑或其他设备与一个有独立地址和具有传送或接收数据功能的网络相连。(A computer or other device connected to a network, which has a unique address and is capable of sending or receiving data.)Node节点,结点,网点 节点可以是工作站、客户、网络用户或个人计算机,还可以是服务器、打印机和其他网络连接的设备。
2023-08-03 14:26:504

struct 初始化

2023-08-03 14:27:063

C语言STRUCT这个不正确引用

1 p是指针。 stu是数组。所以 p=&stu.age是错的。 这里,stu.age本身就是错的。 另外 &stu.age是int*, 和p类型也不同。其它三个都正确,。选D2 sizeof(m)就是union占的空间。 而union是按照最大成员来分配空间的a: 4Bb:2Bc:1B于是输出为4选B
2023-08-03 14:27:171

struct什么意思

结构体在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。例子:struct stu{char *name; //姓名int num; //学号int age; //年龄char group; //所在学习小组float score; //成绩};stu为结构体名,它包含了5个成员,分别是name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
2023-08-03 14:28:161

C语言中struct是个什么意思 怎么用 能不能通俗点说

结构体。就是定义一系列变量的集合例如:structtest{inta;intb;};使用的时候:testt;t.a=1;t.b=2;
2023-08-03 14:29:202

struct用法是什么?

关键字struct能定义各种类型的变量集合,称为结构(structure),并把它们视为一个单元。1.struct的简单例子下面是一个struct的简单的声明例子:struct horse{int age;int height;} Silver;这个例子声明了一个结构horse。horse不是一个变量名,而是一个新的类型,这个类型名称通常称为结构标记符(structure tag)或标记符名称(tag name)。结构标记符的命名方式和我们熟悉的变量名相同。注意:结构标记符可以和变量使用相同的名称,但最好不要这么做,因为这会使代码难以理解。在这个结构例子中,结构的一个实例Silver是在定义结构时声明的。它是一个horse类型的变量,只要使用变量名称Silver,它都包含两个结构成员:age和height。上述的例子也可变得复杂一些,如下:struct horse{int age;int height;char name[20];char father[20];char mother[20];} Dobbin = {24, 17, "Dobbin", "Trigger", "Flossie"};1.1定义结构类型和结构变量可以将结构的声明和结构变量的声明分开。取代前面例子的语句如下:struct horse{int age;int height;char name[20];char father[20];char mother[20];};struct horse Dobbin = {24, l7, "Dobbin", "Trigger", "Flossie"};现在有两个分开的语句。第一个定义结构标记符horse,第二个声明该类型的变量Dobbin。结构定义和结构变量声明语句都用分号结束。在Dobbin结构成员的初始值中,Dobbin的父亲是Trigger,母亲是Flossie。1.2访问结构成员要引用结构成员,应在结构变量名称的后面加上一个句点,再加上成员变量名称。例如,发现Dobbin隐瞒了它的年龄,事实上它比初始化的值年轻,就可以将值修正如下:Dobbin.age = 12;结构变量名称和成员名称间的句点是一个运算符,称为成员选择运算符。这行语句Dobbin结构的age成员设定成12。结构成员和相同类型的变量完全一样,可以给它们设定值,也可以在表达式中像使用一般变量一样使用它们。用下面的语句定义horse结构:struct horse{int age;int height;char name[20];char father[20];char mother[20];};这个结构有两个整数成员age和height,以及三个字符数组成员name、father和mother。在闭括号的后面仅是一个分号,还没有声明horse类型的变量。在定义完horse结构后,具有如下语句:struct horse My_first_horse;1.3未命名的结构不—定要给结构指定标记符名字。用一条语句声明结构和该结构的实例时,可以省略标记符名字。在上一个例子中,声明了horse类型和该类型的实例My_first_horse,也可以改为:struct{int age;int height;char name[20];char father[20];char mother[20];} My_first_horse;使用这种方法的最大缺点是不能在其他语句中定义这个结构的其他实例。这个结构类型的所有变量必须在一行语句中定义。
2023-08-03 14:29:291

struct这个函数到底怎么用

老大 这是结构体的关键字吧 什么函数啊
2023-08-03 14:29:374

struct需要什么头文件

需要C语言或JAVA类、函数的头文件。根据微软官方资料显示,struct是C语言或JAVA类、函数的头文件,被大量使用。结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregatedatatype)的一类。
2023-08-03 14:29:441

C语言结构体Struct怎么使用?

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。结构体定义:第一种:只有结构体定义struct stuff{char job[20];int age;float height;};第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义//直接带变量名Huqinweistruct stuff{char job[20];int age;float height;}Huqinwei;也许初期看不习惯容易困惑,其实这就相当于:struct stuff{char job[20];int age;float height;};struct stuff Huqinwei;第三种:如果该结构体只用一个变量Huqinwei,而不再需要用struct stuff yourname;去定义第二个变量。那么,附加变量初始化的结构体定义还可进一步简化出第三种:struct{char job[20];int age;float height;}Huqinwei;把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。结构体变量及其内部成员变量的定义及访问。要分清结构体变量和结构体内部成员变量的概念。就像刚才的第二种提到的,结构体变量的声明可以用:struct stuff yourname;其成员变量的定义可以随声明进行: struct stuff Huqinwei = {"manager",30,185};也可以考虑结构体之间的赋值:struct stuff faker = Huqinwei;//或 struct stuff faker2;// faker2 = faker;打印,可见结构体的每一个成员变量一模一样如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)Huqinwei.job[0] = "M";Huqinwei.job[1] = "a";Huqinwei.age = 27;Huqinwei.height = 185;结构体成员变量的访问除了可以借助符号".",还可以用"->"访问。扩展资料:结构体数组与结构体指针:一个结构体变量中可以存放一组数据;如一个学生的学号、姓名、成绩等数据。如果有10个学生的数据需要参加运算显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数值型数组不同之处:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。结构体指针和其他类型的指针都是一样的理解,在32位平台不管啥类型的指针都占4个字节的空间。结构体指针就是指向结构体变量的指针;如果一个指针变量中保存了结构体变量的首地址,那么这个指针变量就指向该结构体变量.通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的结构指针变量说明的一般形式为:struct 结构体名 *结构体指针变量名struct student *p = &Boy; //假设事先定义了 struct student Boy。参考资料来源:百度百科-struct
2023-08-03 14:29:521

struct和typedef struct的区别是什么?

C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同。一、声明不同1、struct:struct可以直接使用结构体名字声明结构体。2、typedef struct:typedef struct的为。修饰结构体,结构体有了别名,通过结构体别名声明结构体。二、访问不同1、struct:struct定义的结构体变量,可直接访问结构体成员。2、typedef struct:typedef struct定义的结构体变量,不可直接访问结构体成员,必须显式的通过结构体变量来访问成员。三、重新定义不同1、struct:想重新定义struct结构体的话,必须重写整个结构体。2、typedef struct:想重新定义typedef struct结构体的话,可以通过别名来继承结构体进行重新定义。
2023-08-03 14:30:361

C语言结构体定义

3 就是顺序初始化。 s[0].x=1;s[0].y=3; s[1].x=2;s[1].y=7;所以这个输出就是1*2=2 选c4 和上一个差不多 也是顺序初始化。kw[3].Key="float"kw[3].Key[0] 就是字符"f"kw[3].ID = 4;输出为f,4
2023-08-03 14:30:5211

C语言结构体中struct和typedef struct有什么区别?

typedef可以定义一个新类型以后定义struct变量就不用再加struct了
2023-08-03 14:31:434

结构体变量是什么意思?

结构体是一种新数据类型,属构造类型,它由若干类型各异的“成员”组成;描述这些“成员”可以使用任何基本数据类型,甚至是另外一种构造数据类型都行。定义结构类型使用关键字“ struct”。下边几行定义结构类型 person ,并用该类型定义结构变量 zhangshan 和结构数组 class_one[100] :struct person{ char name[20]; /* 定义姓名 */ char color[10]; /* 定义肤色 */ char sex[2]; /* 定义性别 */ int age; /* 定义年龄 */}; /* 注意这里有分号 */struct person zhangshan, class_one[100];现在,再定义一个商品结构类型 goods ,设商品包含属性有:商品名、商品代码、厂商、单价、质量。把相同类型的成员定义在一行, goods 可定义如下: struct goods {char goodsname[15], goodcode[15], companyname[30] ;float price, weight ;} ;struct 是结构体的关键字, goods 是结构体名,花括号内的所有变量是这个结构体的成员。这种写法虽然节省了程序行,但降低了可读性,故不建议初学者这样写。综上,结构体类型简称为结构类型,其定义格式为:struct < 结构体名 >{ 类型 成员 1; 类型 成员 2; ……};二、结构体类型变量的定义结构体变量简称为结构变量,它由结构类型定义,有三种定义方法。下面以定义结构类型 book 和结构变量 mybook 、 storybook 为例说明之。1. 先定义结构类型,再定义结构变量。 struct book /* 定义结构体类型 */{char bookname[20];float price;char publisher[20];char author[10];} ;struct book mybook, storybook;用这种方法定义结构变量,是最常用的方法,但须注意不能省略关键字“ struct ”。还可以在定义结构变量的同时给它的成员赋初值。如: struct book /* 定义结构体类型 */{char bookname[20];float price;char publisher[20];char author[10];} ;struct book mybook = { “maths”, 24.7, “ 电子社 ”, “zhao” }, storybook;则, mybook 变量的 price = 24.7 。2. 定义结构类型的同时定义结构变量。 struct book /* 定义结构体类型 */{char bookname[20];float price;char publisher[20];char author[10];} struct book mybook, storybook;3. 不定义结构类型,直接定义结构变量。 struct /* 不定义结构类型名 */{char bookname[20];float price;char publisher[20];char author[10];} struct book mybook, storybook;需要说明的是,当某结构类型的成员又是另外一个结构类型时,称嵌套定义,其定义方法如下: struct brith_date {int month ;int day ;int year ;} ; struct{ char name[10] ; char address[30]; char tel[12]; int age; struct data birthday;char sex[3];} student_01 , employee ; 此例直接定义了 student_01 和 employee 两个变量,但是没有定义此结构体的名字,因此不能再定义与 student_01 和 employee 同类的其它结构变量了。
2023-08-03 14:31:581

定义结构体变量时,关键字struct可以省略吗?

在C++中可以,但在c中不行。在c中要稍微改变下也行:typedef struct student{ int sno; char name[20]; char sex; int age; float score;} student;
2023-08-03 14:32:051

什么是struct开发架构

“结构体”是一种构造类型,由若干“成员”组成的。每一个成员可以是一个基本数据类型或者一个构造类型。结构体是一些数据类型的组合,在使用它之前必须先定义它,也就是描述它的构造模型。如同在说明和调用函数之前要先定义函数一样。 二、结构的定义 定义一个结构的一般形式为: struct 结构名 { 成员表列 }; 成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名; 成员名的命名应符合标识符的书写规定。例如: struct stu { int num; char name[20]; char sex; float score; };   在这个结构定义中,结构名为stu,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为score,实型变量。 应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。 凡说明为结构stu的变量都由上述4个成员组成,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。 二、结构类型变量的声明 说明结构变量有以下三种方法。以上面定义的stu为例来加以说明。 1. 先定义结构,再说明结构变量。如: struct stu { int num; char name[20]; char sex; float score; }; struct stu boy1,boy2; 说明了两个变量boy1和boy2为stu结构类型。也可以用宏定义使一个符号常量来表示一个结构类型,例如: #define STU struct stu STU { int num; char name[20]; char sex; float score; }; STU boy1,boy2; 2. 在定义结构类型的同时说明结构变量。例如: struct stu { int num; char name[20]; char sex; float score; }boy1,boy2; 3. 直接说明结构变量。例如: struct { int num; char name[20]; char sex; float score; }boy1,boy2;   第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。在上述stu结构定义中,所有的成员都是基本数据类型或数组类型。成员是一个结构, 即构成了嵌套的结构。struct date{ int month; int day; int year; } struct{ int num; char name[20]; char sex; struct date birthday; float score; }boy1,boy2;   首先定义一个结构date,由month(月)、day(日)、year(年)三个成员组成。在定义并说明变量 boy1 和 boy2 时, 其中的成员birthday被说明为data结构类型。成员名可与程序中其它变量同名,互不干扰。结构变量成员的表示方法在程序中使用结构变量时, 往往不把它作为一个整体来使用。   在ANSI C中除了允许具有相同类型的结构变量相互赋值以外, 一般对结构变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的成员来实现的。   表示结构变量成员的一般形式是: 结构变量名.成员名 例如:boy1.num (第一个人的学号) boy2.sex (第二个人的性别) 如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:boy1.birthday.month 即第一个人出生的月份成员可以在程序中单独使用,与普通变量完全相同。 三、结构体变量的赋值 前面已经介绍,结构体变量的赋值就是给其各成员赋值。因此,可用输入语句或赋值语句来对结构体变量进行赋值。 示例3.1main(){ struct stu { int num; char *name; char sex; float score; } boy1,boy2; boy1.num=102; boy1.name="Zhang ping"; printf("input sex and score "); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d Name=%s ",boy2.num,boy2.name); printf("Sex=%c Score=%f ",boy2.sex,boy2.score);}  本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。本例表示了结构变量的赋值、输入和输出的方法。 四、结构体变量的初始化   如果结构体变量是全局变量或为静态变量, 则可对它作初始化赋值。对局部或自动结构变量不能作初始化赋值。 4.1、全局结构体变量的初始化。示例4.1.1//定义结构体struct structA{char a;char b;int c;};structA a = {"a" , "a" ,1}; // 定义结构体时直接赋初值示例4.1.2struct stu /*定义结构体*/{ int num; char *name; char sex; float score;} boy2,boy1={102,"Zhang ping","M",78.5};main(){ boy2=boy1; printf("Number=%d Name=%s ",boy2.num,boy2.name); printf("Sex=%c Score=%f ",boy2.sex,boy2.score);}本例中,boy2,boy1均被定义为外部结构变量,并对boy1作了初始化赋值。在main函数中,把boy1的值整体赋予boy2, 然后用两个printf语句输出boy2各成员的值。 4.2、静态结构变量初始化 示例4.2main(){ static struct stu /*定义静态结构体变量*/ { int num; char *name; char sex; float score; }boy2,boy1={102,"Zhang ping","M",78.5}; boy2=boy1; printf("Number=%d Name=%s ",boy2.num,boy2.name); printf("Sex=%c Score=%f ",boy2.sex,boy2.score);}本例是把boy1,boy2都定义为静态局部的结构体变量, 同样可以作初始化赋值。 五、结构数组 数组的元素也可以是结构体类型的。 因此可以构成结构体类型数组。结构体数组的每一个元素都是具有相同结构体类型的下标结构体变量。 在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。 结构体数组的定义方法和结构体变量相似,只需说明它为数组类型即可。例如: struct stu { int num; char *name; char sex; float score; }boy[5]; 定义了一个结构数组boy1,共有5个元素,boy[0]~boy[4]。每个数组元素都具有struct stu的结构形式。 对全局结构体数组或静态结构体数组可以作初始化赋值,例如: struct stu { int num; char *name; char sex; float score; }boy[5]={ {101,"Li ping","M",45}, {102,"Zhang ping","M",62.5}, {103,"He fang","F",92.5}, {104,"Cheng ling","F",87}, {105,"Wang ming","M",58}; } 另外,当对全部元素作初始化赋值时,也可不给出数组长度。 示例5.1计算学生的平均成绩和不及格的人数。 struct stu{ int num; char *name; char sex; float score;}boy[5]={ {101,"Li ping","M",45}, {102,"Zhang ping","M",62.5}, {103,"He fang","F",92.5}, {104,"Cheng ling","F",87}, {105,"Wang ming","M",58},};main(){ int i,c=0; float ave,s=0; for(i=0;i<5;i++) { s+=boy.score; if(boy.score<60) c+=1; } printf("s=%f ",s); ave=s/5; printf("average=%f count=%d ",ave,c);}
2023-08-03 14:34:382

struct和typedef struct有什么区别?

C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同。一、声明不同1、struct:struct可以直接使用结构体名字声明结构体。2、typedef struct:typedef struct的为。修饰结构体,结构体有了别名,通过结构体别名声明结构体。二、访问不同1、struct:struct定义的结构体变量,可直接访问结构体成员。2、typedef struct:typedef struct定义的结构体变量,不可直接访问结构体成员,必须显式的通过结构体变量来访问成员。三、重新定义不同1、struct:想重新定义struct结构体的话,必须重写整个结构体。2、typedef struct:想重新定义typedef struct结构体的话,可以通过别名来继承结构体进行重新定义。
2023-08-03 14:34:461

struct和class的区别

c中结构体和类的最大区别是结构体不能定义成员函数。c++中结构体是可以定义成员函数的,所以c++中结构体和类基本是一样,唯一的不同点在于,结构体中缺省权限是public,类中缺省权限是private。即如果你在结构体和类中没有写public等的时候,结构体默认为public,类中默认为private。
2023-08-03 14:35:113

为什么要有struct 关键字

原因是你使用了typedef这个关键字,上面的代码等效于这个:struct PTNode{......};typedef struct PTNode PTNode;原因在于在C语言中如果是struct的类型,则在使用时必须加上struct关键字,这就是说,如果没有typedef 这一行,那么在C中,下面的语句将会编译失败(C++不会,但C++兼容C,所以加上了typedef这一行也不会有问题)PTNode node; ////错误,如果没有typedef这一行。struct PTNode node; ////正确
2023-08-03 14:35:191

以struct为后缀的单词10个

以struct为后缀的单词不多: construct vt.建造;建设; destruct vi. 破坏; instruct vt.教;指示; obstruct v. 阻塞,截断; reconstruct vt. 重建,改造,复兴 扩展资料   They have tried to reconstruct the settlement as it would have been in Iron Age times.   他们已试着按铁器时代的样子重建这个小村落。   Investigators are trying to reconstruct the circumstances of the crash.   调查人员正试图重现撞车时的情形。   She came on every ride herself, the better to instruct her eager pupils.   每一个骑乘项目她都要亲自试一试,以便更好地指导她那些跃跃欲试的"小学生。   He instructed that a wall should be built around the city.   他下令在城的周围筑一道城墙。   All our staff have been instructed in sign language.   我们的员工都接受过手语训练。
2023-08-03 14:35:261

C语言struct函数?

第一行就是定义一个结构体SqList类型的变量L。前面的typedef struct{//...}SqList;已经将SqList定义成了一个结构体类型。
2023-08-03 14:35:344

C语言 struct与指针

确切的说应该是结构体指针,就是该指针指向的内容是以结构体为单位的,如果是一段连续的结构体,那么pt++后指针的跨度是sizeof(struct)至于二级指针和其他类型的是一样的用法,作为函数参数时可以修改*p所指向的结构体内容
2023-08-03 14:36:002

struct定义中在成员后面加冒号“:1”是什么意思?

位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为: struct 位域结构名 { 位域列表 };其中位域列表的形式为: 类型说明符 位域名:位域长度 例如:struct bs{int a:8;int b:2;int c:6;}; 位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:struct bs{int a:8;int b:2;int c:6;}data; 说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点说明:1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:struct bs{unsigned a:4unsigned :0 /*空域*/unsigned b:4 /*从下一单元开始存放*/unsigned c:4}在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:struct k{int a:1int :2 /*该2位不能使用*/int b:3int c:2}; 从以上分析可以看出,位域在本质上就是一种结构类型, 不过其成员是按二进位分配的。二、位域的使用位域的使用和结构成员的使用相同,其一般形式为: 位域变量名·位域名 位域允许用各种格式输出。main(){struct bs{unsigned a:1;unsigned b:3;unsigned c:4;} bit,*pbit;bit.a=1;bit.b=7;bit.c=15;printf("%d,%d,%d ",bit.a,bit.b,bit.c);pbit=&bit;pbit->a=0;pbit->b&=3;pbit->c|=1;printf("%d,%d,%d ",pbit->a,pbit->b,pbit->c);} 上例程序中定义了位域结构bs,三个位域为a,b,c。说明了bs类型的变量bit和指向bs类型的指针变量pbit。这表示位域也是可以使用指针的。程序的9、10、11三行分别给三个位域赋值。( 应注意赋值不能超过该位域的允许范围)程序第12行以整型量格式输出三个域的内容。第13行把位域变量bit的地址送给指针变量pbit。第14行用指针 方式给位域a重新赋值,赋为0。第15行使用了复合的位运算符"&=", 该行相当于: pbit->b=pbit->b&3位域b中原有值为7,与3作按位与运算的结果为3(111&011=011,十进制值为 3)。同样,程序第16行中使用了复合位运算"|=", 相当于: pbit->c=pbit->c|1其结果为15。程序第17行用指针方式输出了这三个域的值。为了节省空间,可以把几个数据压缩到少数的几个类型空间上,比如需要表示二个3位二进制的数,一个2位二进制的数,则可以用一个8位的字符表示之。struct { char a : 3; char b : 3; char c : 2;} ;这个结构体所占空间为一个字节,8位。节省了空间。
2023-08-03 14:36:082

c语言struct a b和不带struct关键字直接声明a b有什么区别?

当然有区别,一个是结构体,不直接声明是编译不通过的
2023-08-03 14:36:282

C语言 中 define 和struct?

define是宏定义,格式definexy如果你的y比较长,就用一个较短的x代替,以后程序中的x全部转换为y。struct是结构体定义,可以定义一大堆变量或数组
2023-08-03 14:36:411

数据结构中 算法开头status 是什么意思?还有struct是什么意思?

struct是结构体类型
2023-08-03 14:36:592

C语言中class和struct的区别是什么?

struct没有继承,没有封装,封装只有初步得封装。而class把数据接口以三种类型封装,private,public,protected,还可以继承和派生。但是它们都可以提供自己接口函数,构造函数。一个类可以由结构继承而来。struct只能叫做数据集合,外部可以任意访问,但是类就完成了封装,维护了数据的安全struct的成员默认权限是public,而class的成员默认权限是privatestruct的默认继承方式为public,而class的默认继承为private使用上来说没有太大的区别,不过一个是面向对象的语言,使用更加的方便和简洁class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化
2023-08-03 14:37:072

C语言中 struct Student max(struct Student stu[])是什么意

struct Student是结构体类型,struct Student max( )是一个函数,函数名叫max,返回值类型是struct Student型数据实参struct Student stu[]是一个struct Student型地址,形参名stu我觉得你是看蒙了,你把struct Student整体替换成int再看,会觉得无比的顺眼。int和struct Student都是类型名,穿上马甲就不认识了?
2023-08-03 14:38:161

关于C语言中的结构体。这些代码是什么意思? struct a { ... }; struct a b[20]= { ... };

struct a { ... }; //结构体初始法struct b[20]= { ... }; //定义结构体数组 b
2023-08-03 14:38:302

c语言中如何定义一个结构体

struct student //结构体类型的说明与定义分开。 声明 {...2.2 . 不环保的方式 #include <stdio.h> struct student /*声明时直接定义*/ { int...3.
2023-08-03 14:38:496

c语言里面的结构体是什么意思

定义几个相关变量属于同一个名称,可以把这些变量理解为属于这个结构体的变量。访问和修改的时候可以这样使用: 结构体名.变量名
2023-08-03 14:39:345