定义和使用结构体

本文围绕C语言结构体展开,介绍了结构体的定义,包括自建类型、重命名及定义变量的方法;阐述了结构体的初始化和成员访问方式;还讲解了结构体与数组、指针的结合使用,如结构体数组的定义与引用,以及结构体指针的定义和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.结构体的定义

1.自己建立结构体类型

c语言提供了基本的数据类型,如char,short,int,float...等类型,我们称为内置类型。我们也可以使用结构体来封装一些属性,设计出新的类型,在c语言中称为结构体类型。

设计如下:

struct 结构体名称{

成员列表;(可以是基本数据类型,也可以是指针,数组其他类型)

};

下段代码展示建立一个学生类型:

struct student{
//以下为结构体类型的成员
   char name[10];//定义一个学生的姓名
   int id;//定义一个学生的学号
   int age;//定义一个学生的年龄
   char sex[10];//定义一个学生的性别
   int class;//定义一个学生的班级
};

​

一个结构体中的成员变量也可以是结构体(该结构体一定要在原始结构体之前定义),如下代码定义一个学生的出生年月:

struct date{ //定义一个日期的结构体
int month;
int day;
int year;
};
​
struct student{
//以下为结构体类型的成员
   char name[10];//定义一个学生的姓名
   int id;//定义一个学生的学号
   int age;//定义一个学生的年龄
   char sex[10];//定义一个学生的性别
   int class;//定义一个学生的班级
   struct data birthday;//成员变量birthday属于 struct data类型
};

​

2.对结构体重新命名

typedef 可以对基本的数据类型进行重新命名,当然也可以对结构体类型进行重新命名;

typedef struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构别名;

例如,对结构体student进行重命名为Stu

typedef struct student{
//以下为结构体类型的成员
   char name[10];//定义一个学生的姓名
   int id;//定义一个学生的学号
   int age;//定义一个学生的年龄
   char sex[10];//定义一个学生的性别
   int class;//定义一个学生的班级
}Stu;//将student重命名为Stu

3.定义结构体类型变量

a.先声明结构体类型,再定义结构体变量

如:声明一个学生类型,用Stu1和Stu2来定义

struct student Stu1,Stu2;

b.在声明类型的同时定义如对结构体重新命名所示。

c.不指定类型名而直接定义

一般形式为:

struct {

成员列表;

}Stu1,Stu2;

二.结构体的初始化

1.在定义结构体变量时,可以对它进行初始化,即赋予初始值。

2.也可以对结构体中某一成员进行初始化:

如:对学生类型中姓名进行初始化

student.name="博客";//对name赋值为博客

三.结构体成员的访问

一般格式为 结构体变量.成员名;

student.name;//对student结构体中的name成员进行访问
student.birthday.year;//对student结构体中的结构体birthday中的year进行访问

四.结构体与数组

1.结构体数组的定义

a.一般格式:

struct 结构体名 {

成员变量

}数组名[数组长度];

b.先声明一个结构体类型,再用次类型定义结构体数组:

结构体类型 数组名[数组长度];

c.对结构体初始化的形式是在定义数组的后面加上:

={初值表列};

//a.一般形式
struct  student{
//成员列表
}stu[10];//定义长度为10的结构体数组

//b.先声明一个结构体,再用此类型定义结构体数组
struct student {
};//声明一个结构体
struct school
{
struct student stu[10];//stu是结构体数组名,而stu[10]这个结构体数组属于school结构体的成员变量
};
//c.定义数组的后面加上初值列表
struct student stu={“”,“”,“”};

2.结构体数组的引用

一般形式:结构体名称[].成员变量;

五.结构体与指针

所谓结构体指针是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。

一般定义:struct Student *p;//p可以指向 struct Student类型的变量或数组元素

struct student
{
//成员变量
  char name[10];
  int id;
};
struct school
{
  struct student [10]
  int class;
};
//指向结构体变量的指针
struct student stu1;//定义struct student 类型的变量 stu1
struct student *p;//指向struct student 类型数据的指针变量
p=&stu1;//p指向stu1

对结构体指针的使用:

(*指针名称).成员名

也可以用指向运算符(->) 指针名称->成员名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值