问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

结构体的C语言中的结构体

发布网友 发布时间:2022-04-30 22:25

我来回答

1个回答

热心网友 时间:2022-06-19 14:19

在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。 结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。  struct tag { member-list } variable-list ; 在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。以下为示例: //此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c//同时又声明了结构体变量s1//这个结构体并没有标明其标签struct {    int a;    char b;    double c;} s1;//同上声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c//结构体的标签被命名为SIMPLE,没有声明变量struct SIMPLE{    int a;    char b;    double c;};//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3struct SIMPLE t1, t2[20], *t3; //也可以用typedef创建新类型typedef struct{    int a;    char b;    double c; } Simple2;//现在可以用Simple2作为类型声明新的结构体变量Simple2 u1, u2[20], *u3;在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令t3=&s1,则是非法的。
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。 //此结构体的声明包含了其他的结构体struct COMPLEX{    char string[100];    struct SIMPLE a;}; //此结构体的声明包含了指向自己类型的指针struct NODE{    char string[100];    struct NODE *next_node;};如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明,如下所示: struct B;    //对结构体B进行不完整声明 //结构体A中包含指向结构体B的指针struct A{    struct B *partner;    //other members;}; //结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明struct B{    struct A *partner;    //other members;}; 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。 结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
亲肤绒与猫抓布,哪款面料做沙发好? 我需要 天津大学_高等数学(上下册)_蔡高厅,有这个的百度网盘吗? 蔡高厅讲的高数是哪版教材 自考高等数学工专如何学 2022情侣必备的经典感恩节祝福语 送给爱人的感恩节祝福语 感恩节给爱人祝福语 如何下载小升初数学试卷 请问各位朋友,有哪些好网站,上面有各地优秀的小升初的数学试卷? 民生信用卡什么合适 某个女的是 未来佛弥勒佛 结构体和共用体在c语言中是怎么用的 c语言中结构体的作用到底是干什么的,能通俗点讲吗 电脑不知道开机密码 c语言,结构体 C语言的结构体到底有用没? C语言的结构体的具体作用是?C的主要用途? 会计与会计助理有什么区别,要求详细 财务助理属于什么行业 买的wifi6路由,米9手机显示5代,wifi6技术晚于米9上市,怎么验证路由器wifi几代技术?_百度问一问 霉变水果周围东西能吃吗 发霉旁边的水果能吃吗 水果店买到了坏的水果怎么办? 银联支付更新是什么意思 今晚在超市买到发霉的水果投诉有效吗 宝付如何打造支付安全系统?宝付支付新方式怎样? 移动支付新风向!小米Pay对比三星Pay 支付新产品的打样费计入什么科目?客户下单,先打样出10个样品,客户确定后没问题,大量生产。打样费计_百度问一问 因为支付宝的扫码支付新生了那些新产业? 刚才在超市买的葡萄摘出来几个,然后发现里面是发霉的,能退吗? 释迦牟尼佛说过,因为答应了女众可以出家,佛教早灭500年。 谁能知道其中的道理呢? 佛说法交灯经。。。 电脑开不开机有密码不知道密码怎么办 c语言结构体是什么意思?有什么用处以及格式? 预言中国东方处女佛是真的吗 释迦牟尼佛离世时的预言 说法灭尽经 在c语言中枚举类型和结构体类型有什么用?在什么情况下用? 我记得有一首歌是女的诵读的。诵读的是 佛说:……佛说:…… 就记得这些了,就是是与佛对话一样! 有 有一本小说,我就记得主角身边有一个女的,是以杀入佛,身材书中描述特别好。求书名 c语言中结构体中有数组和指针时,什么情况下用->什么情况用. 《女身令佛欢喜经》根本就是藏密伪造! C语言中结构体类型名与变量名区别? 1983年1月13日 晨时生 女,请问命运较坎坷,不顺,婚姻不幸,能化解么,是否与佛有缘? 王妃黑叶猴内容简介? 如果大乘佛法是佛说的那为什么到佛灭渡后几百年才出现呢 在古龙的小说中,大欢喜女菩萨为什么会死呢? 分布式光伏电站做无线数据监控和采集用什么无线模块合适? 佛说:众生皆有佛性,人人皆可成佛!为什么已知的佛里面没有女性? - 信息提示 佛教中有女菩萨吗/佛教中有女菩萨吗