c语言typedef的用法

浏览:1492   发布时间: 2022年11月24日

C语言结构体的定义和使用

最近跑SOC时,发现有时候可以将IP寄存器的各个field放在结构体中,然后在C CASE中对其赋值,再调用自定义的读写寄存器函数以供测功能使用。这里简单复习一些结构体的知识。

一、什么是结构体

在实际问题中,一组数据往往具有不同的数据类型;例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能用一个数组来存放。

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate datatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

定义结构体的一般形式为:

在成员表列中可以是几种基本数据类型,也可以是结构体类型。

struct 类型名{} 变量;后的分号不能漏

例如用结构体来表示学生信息:

二、结构体变量

结构体也是一种数据类型,可以用来说明变量。例如:

定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 4 个成员组成。注意关键字struct不能少。

结构体的各个成员在内存中是连续存储的。stu1、stu2 的内存如下图所示:

也可以在定义结构体的同时定义结构体变量:

也可以用宏定义使一个符号常量来表示一个结构类型,例如

typedef和#define用法不同,甚至可以结合起来灵活使用,使用时一定要注意两者的不同之处。

三、成员的获取和赋值

在C语言中,使用点号.来获取结构体中的一个成员,一般格式为:

例如:

获取成员后,就可以对该成员进行赋值了,例如:

stu1.name = “Tom”;

stu2.score = 90.5;

这里也可以用另外一种符号,即->

“->”是一个整体,它是用于指向结构体子数据的指针,用来取子数据,例如

除了可以对成员进行逐一赋值,也可以像数组一样整体赋值,例如: