C语言中结构体struct的用法

发布时间:2024-11-07 15:17:38  
定义结构体变量

下面举一个例子来说明怎样定义结构体变量。 嵌入式资料包"> 【付费】STM32嵌入式资料包

 struct string  {     char name[8];     int age;     char sex[2];     char depart[20];     float wage1, wage2, wage3, wage4, wage5;  }person;

这个例子定义了一个结构名为string的结构体变量person。还可以省略变量名person,做如下定义:

 struct string  {     char name[8];     int age;     char sex[2];     char depart[20];     float wage1, wage2, wage3, wage4, wage5;  };   struct string person;   //定义结构名为string的结构体变量person

定义多个具有相同形式的结构变量:

struct string Liming, Liuqi, ...;

有一种结构体常常出现在函数内部,省略结构名,则称之为无名结构,如下:

 struct  {     char name[8];     int age;     char sex[2];     char depart[20];     float wage1, wage2, wage3, wage4, wage5;  } Liming, Liuqi;

结构体成员的获取与赋值

结构是一个新的数据类型,结构成员的表示方式为:

结构变量.成员名

如果将"结构变量.成员名"看成一个整体,这样就可以像其他变量那样使用。

下面这个例子定义了一个结构变量stu1,分别给name、age、group赋值,并打印输出。

#include <stdio.h>int main(){struct  {    char *name;  //姓名int age;  //年龄    char group;  //所在小组  } stu1;//给结构体成员赋值  stu1.name = "Tom";  stu1.age = 18;  stu1.group = 'A';//读取结构体成员的值printf("%s的年龄是%d,在%c组
", stu1.name, stu1.age, stu1.group);return 0;}

结构体数组

结构体数组就是具有相同结构类型的变量集合,假如要定义一个班级40个同学 的姓名、性别、年龄和住址, 可以定义成一个结构数组。如下所示:

 struct {     char name[8];     char sex[2];     int age;     char addr[40];  }student[40];

结构体数组成员的访问是以数组元素为结构变量的, 其形式为:

 结构数组元素.成员名

例如:

student[0].namestudent[30].age

结构体指针

结构体指针由一个加在结构变量名前的*操作符来定义,定义一个结构体指针如下:

struct string   char name[8];    char sex[2];    int age;    char addr[40]; }*student;

使用结构体指针对结构体成员的访问与结构体变量对结构体成员的访问在表达方式不同。结构体指针对结构体成员的访问方式为:

 结构体指针名->结构体成员 

给上面定义的结构体中name和age赋值的语句:

strcpy(student->name, "acket"); //student->name就是(*student).namestudent->age=18; 

需要指出的是结构体指针是指向结构体的一个指针,即结构体中第一个成员的首地址,因此在使用之前应该对结构体指针初始化,即分配整个结构体长度的字节空间:

student=(struct string*)malloc(size of (struct string));//size of (struct string)是自动求取string结构体的字节长度

malloc()函数定义了一个大小为结构体长度的内存区域,然后将其地址作为结构体指针返回,相关 文章: C语言中的内存管理

位结构

位结构是一种特殊的结构体,位结构定义的一般形式为:

 struct 位结构名 {     数据类型 变量名: 整型常数;     数据类型 变量名: 整型常数;  }位结构变量;

其中数据类型必须是int(unsigned或signed,但当成员长度为1时, 会被认为是unsigned类型),整型常数必须是0~15的非负整数,表示二进制位个数。变量名是选择项,可以不命名,下面定义了一个位结构:

 struct {     unsigned incon: 8;    /*incon占用低字节 的0~7共8位*/     unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/     unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/     unsigned blink: 1;  /*blink占用高字节的第7位*/  }ch;

位结构成员的访问与结构体成员的访问相同,访问位结构中的bgcolor成员可写成:

ch.bgcolor

举个例子

struct info{     char name[8];     int age;     struct addr address;     float pay;     unsigned state: 1    unsigned pay: 1}workers;

上面结构体定义了工资的信息,其中有两个只有1位的位结构成员,表示工人的状态以及工资是否已发放。

typedef定义结构体

typedef struct  person{int age ;char *name;char *sex;}student;student stu1; //此处可以用student来定义一个结构体变量

typedef的作用就相当于给struct person取了一个别名student。

文章来源于:单片机与嵌入式    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    存所有权和借用系统消除了内存泄漏的风险,以及其他内存相关错误,而C语言由于依赖不太可靠的垃圾回收技术,就比较容易遇到这些风险和错误。 •并发性:Rust的所有权系统和数据结构能够实现更安全、更高......
    从关注我公众号的读者朋友中,我综合给出的答案是No. 原因:很多朋友的基础还是偏弱。 HAL这套库是需要有一定数据结构功底的朋友来学习。简单说,你需要对指针、结构体、回调函数等这类C语言知识有一定掌握才行。 使用......
    是:No 这个问题见仁见智,但是从关注我公众号的读者朋友中,我综合给出的答案是No. 原因:很多朋友的基础还是偏弱。 HAL这套库是需要有一定数据结构功底的朋友来学习。简单说,你需要对指针、结构体、回调......
    开始执行 4、语句以分号“;”结束 5、书写格式自由 6、用/*.。.*/做注释 C语言中的结构体 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data......
    知识熟练后就可以学习链表、队列、树、图等知识。最后要熟练各个知识点的运用,可以把学习的重点放在函数的设计框架、参数设计、返回值设计等关键问题上。 学好数学、英语 在C语言的学习过程中,一般有大量的算法和数据结构......
    码,其中系统复位中的C语言版就是core_cm3.h里面的源代码。 1.NVIC_CoreReset内核复位 CM3 允许由软件触发复位序列,用于特殊的调试或维护目的。在CM3中,有两......
    硬件工程师更有前途呢?本文将对此进行详细探讨。 我们需要了解一下软件工程师和硬件工程师的区别。软件工程师是指专门从事软件开发、维护和销售的专业人士。他们需要掌握计算机科学、数据结构......
    数字电压表制作——ADC0832模数转换应用程序(C语言版) /*目标器件:AT89S52 */ /*晶振:12.000MHZ */ /*编译环境:Keil uVision2 V2.12......
    指定对齐值value。 4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。 有 了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据......
    中断的发生是由外部因素决定的,程序中无法事先安排调用语句。因此,调用中断函数的过程是由硬件自动完成的。 参考资料: (1)王静霞等. 单片机应用计数(C语言版)第3版[M]. 北京,电子工业出版社,2015:166. ......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>