首页 / 行业
C语言中struct的用法有哪些
2021-09-15 09:41:00
下面举一个例子来说明怎样定义结构体变量。
structstring
{
charname[8];
intage;
charsex[2];
chardepart[20];
floatwage1,wage2,wage3,wage4,wage5;
}person;
这个例子定义了一个结构名为string的结构体变量person。还可以省略变量名person,做如下定义:
structstring
{
charname[8];
intage;
charsex[2];
chardepart[20];
floatwage1,wage2,wage3,wage4,wage5;
};
structstringperson;//定义结构名为string的结构体变量person
定义多个具有相同形式的结构变量:
structstringLiming,Liuqi,...;
有一种结构体常常出现在函数内部,省略结构名,则称之为无名结构,如下:
struct
{
charname[8];
intage;
charsex[2];
chardepart[20];
floatwage1,wage2,wage3,wage4,wage5;
} Liming, Liuqi;
结构体成员的获取与赋值
结构是一个新的数据类型,结构成员的表示方式为:
结构变量.成员名
如果将"结构变量.成员名"看成一个整体,这样就可以像其他变量那样使用。
下面这个例子定义了一个结构变量stu1,分别给name、age、group赋值,并打印输出。
int main()
{
struct
{
char*name;//姓名
int age; //年龄
chargroup;//所在小组
} stu1;
//给结构体成员赋值
stu1.name="Tom";
stu1.age = 18;
stu1.group='A';
//读取结构体成员的值
printf("%s的年龄是%d,在%c组\n", stu1.name, stu1.age, stu1.group);
return 0;
}
结构体数组
结构体数组就是具有相同结构类型的变量集合,假如要定义一个班级40个同学 的姓名、性别、年龄和住址, 可以定义成一个结构数组。如下所示:
struct
{
charname[8];
charsex[2];
intage;
charaddr[40];
}student[40];
结构体数组成员的访问是以数组元素为结构变量的, 其形式为:
结构数组元素.成员名
例如:
student[0].name
student[30].age
结构体指针
结构体指针由一个加在结构变量名前的*操作符来定义,定义一个结构体指针如下:
structstring
{
charname[8];
charsex[2];
intage;
charaddr[40];
}*student;
使用结构体指针对结构体成员的访问与结构体变量对结构体成员的访问在表达方式不同。结构体指针对结构体成员的访问方式为:
结构体指针名->结构体成员
给上面定义的结构体中name和age赋值的语句:
"acket");//student->name就是(*student).name name,
age=18;
需要指出的是结构体指针是指向结构体的一个指针,即结构体中第一个成员的首地址,因此在使用之前应该对结构体指针初始化,即分配整个结构体长度的字节空间:
student=(structstring*)malloc(sizeof(structstring));
//sizeof(structstring)是自动求取string结构体的字节长度
malloc()函数定义了一个大小为结构体长度的内存区域,然后将其地址作为结构体指针返回。
位结构
位结构是一种特殊的结构体,位结构定义的一般形式为:
struct 位结构名
{
数据类型变量名:整型常数;
数据类型变量名:整型常数;
}位结构变量;
其中数据类型必须是int(unsigned或signed,但当成员长度为1时, 会被认为是unsigned类型),整型常数必须是0~15的非负整数,表示二进制位个数。变量名是选择项,可以不命名,下面定义了一个位结构:
struct
{
unsignedincon:8;/*incon占用低字节的0~7共8位*/
unsignedtxcolor:4;/*txcolor占用高字节的0~3位共4位*/
unsignedbgcolor:3;/*bgcolor占用高字节的4~6位共3位*/
unsignedblink:1;/*blink占用高字节的第7位*/
}ch;
位结构成员的访问与结构体成员的访问相同,访问位结构中的bgcolor成员可写成:
ch.bgcolor
举个例子
structinfo
{
charname[8];
intage;
structaddraddress;
floatpay;
unsignedstate:1;
unsignedpay:1;
}workers;
上面结构体定义了工资的信息,其中有两个只有1位的位结构成员,表示工人的状态以及工资是否已发放。
typedef定义结构体
typedef struct person
{
intage;
char*name;
char*sex;
}student;
studentstu1;//此处可以用student来定义一个结构体变量
typedef的作用就相当于给struct person取了一个别名student。
编辑:jq最新内容
手机 |
相关内容
位移传感器结构类型及工作原理与应
位移传感器结构类型及工作原理与应用,工作原理,类型,结构,位移传感器,常见,效应,FDV302P位移传感器是一种用于测量物体位移或位置的写flash芯片时为什么需要先擦除?
写flash芯片时为什么需要先擦除?,擦除,芯片,充电,初始状态,存储单元,数据,Flash芯片是一种非易失性存储器技术,用于存储数据并实现固华为公开半导体芯片专利:可提高三维
华为公开半导体芯片专利:可提高三维存储器的存储密度,专利,存储密度,存储器,芯片,存储单元,调整,华为是全球领先的信息与通信技术解半导体主控技术:驱动自动驾驶革命的
半导体主控技术:驱动自动驾驶革命的引擎,自动驾驶,交通,自动驾驶系统,数据,车辆,自动,随着科技的不断进步,自动驾驶技术已经成为现实FPGA学习笔记:逻辑单元的基本结构
FPGA学习笔记:逻辑单元的基本结构,结构,单元,逻辑运算,数字,信号,结构单元,FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件Arbe 4D成像雷达以高分辨率雷达技
Arbe 4D成像雷达以高分辨率雷达技术和先进处理技术消除“幽灵刹车”问题,刹车,成像,分辨率,系统,目标,数据,Arbe 4D成像雷达是一种清华大学研发光电融合芯片,算力超商
清华大学研发光电融合芯片,算力超商用芯片三千余倍,芯片,研发,商用,测试,计算,科学研究,近日,清华大学发布了一项重要科研成果,他们成聊聊芯片中的负压产生机理及其应用
聊聊芯片中的负压产生机理及其应用,芯片,细胞,用于,测量,生物,结构,芯片中的负压是指在芯片内部产生的负压环境。在某些应用中,负压