关于c语言结构体

1.为什么要定义结构体类型

储存一组逻辑相关属性相同或不同的数据

2.结构体变量的定义

struct 结构体名
{
数据类型 第一个成员名称

}; // " ; "不可省略

上为结构体模板,相当于声明了一种数据的组织形式
结构体名也是结构体标签,可以省略

typedef struct 结构体名 别名(一般大写)
{
数据类型 第一个成员名称

}变量名;
typedef 只是为一种已存在的类型定义一个新名字,并不是定义一种新的数据类型
别名也可以写在变量名的位置,一般大写,变量可以后续定义

3.结构体变量的引用

1.成员选择运算符(圆点运算符).

结构体变量名.成员名

当出现结构体嵌套时:

例: stu.birthday.year

2.指向运算符(箭头运算符)->
先声明一个指向结构体变量的指针
eg:

typedef struct STUDENT
	{
		long			studentID;
		DATE 			birthday;              //结构体嵌套
	}stu;
	typedef  struct  date    //此处date为结构体标识
	{
			int		year;
			char	month[10];
			int		day;
	}DATE;   	//别名
STUDENT *pt = &stu;   //声明一个指针变量并且指向该结构体
pt->studentID=      //第一种引用形式
(*pt).studentID=    //第二种
pt->birthday.year=  //嵌套的引用

4.关于结构体变量的指针

typedef struct STUDENT
	{
		int	score[4];
	}stu[10];

STUDENT *pt=stu;
等价于
STUDENT *pt=&stu[0];

pt->score[0]引用的是stu[0]的值 等价于 stu[0].score[0]
而pt+1 表示从stu[0]指向stu[1]的首地址

5.向函数传递结构体

三种方法

  1. 用结构体的单个成员作为函数参数,向函数传递结构体的单个成员。(很少使用,因为与普通类型变量作为实参传递没有区别)
  2. 用结构体变量作为函数参数,向函数传递结构体的完整结构
    将整个结构体的内容赋值给被调函数,是传值调用,不会影响相应实参结构体成员的值
  3. 用结构体指针或结构体数组做函数参数,向函数传递结构体的首地址
    因为是传地址调用,所以在函数内部对于结构体的修改会影响到相应实参结构体成员的值
    这种方法相对于第二种而言,效率更高,因为只传递一个地址

(2) eg:

void F( struct date p).
{
	int	year;
}
struct	date
{
	...
}
main()
{
struct date d;
d.year=1000;
F(d);
....
}

(3) eg:

void F( struct date *pt).
{
	int	year;
}
struct	date
{
	...
}
main()
{
struct date d;
d.year=1000;
F(&d);
....
}

如若在形参声明时加上const
const stuct date *pt 则不能对对应的实参结构体的数值进行修改

6.使用结构体封装函数的好处

  1. 精简参数个数(防止过多使用全局变量)
    可以把多个函数中用到的变量封装进结构体,调用时调用结构体即可
  2. 使函数接口更加简洁
  3. 可扩展性更好

7.补充注意

<1>结构体只能用来赋值,其他操作都不行
在结构体中数组可以直接赋值但字符数组不可以,应使用strcpy
eg: strcpy(stu.name,“王”);
<2>结构体数组
eg:
student[0]:代表第一个学生,结构体声明的一套成员,都有这个学生的一个
需要的时候直接调用即可,比如 student[0].name 等等
相对于的,student[1],就代表第二个学生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言结构体是一种用户自定义的数据类型,它允许我们存储不同类型的数据在一个内存中。结构体是由多个成员组成的,每个成员可以是任意数据类型,可以是基本数据类型(如整数、浮点数、字符等),也可以是其他结构体类型或指针类型。结构体可以用来描述现实中的复杂对象或数据结构,例如学生、员工、图书等,方便我们对其进行操作和管理。 使用结构体可以将相关的数据和功能封装在一起,提高代码的可读性和可维护性。通过定义一个结构体类型,我们可以创建该类型的变量,并通过变量名来访问结构体的成员。结构体成员的访问可以使用"."运算符来进行,例如:"struct_name.member_name"。 在C语言中,可以通过以下方式定义一个结构体: ``` struct 结构体名称 { 数据类型 成员1; 数据类型 成员2; ... }; ``` 可以使用typedef关键字来给结构体类型定义一个别名,方便后续使用。 结构体的使用可以参考下面的例子: ``` #include<stdio.h> // 定义一个结构体类型 struct Student { int id; char name[20]; int age; }; int main() { // 声明一个结构体变量 struct Student stu; // 给结构体的成员赋值 stu.id = 123; strcpy(stu.name, "Tom"); stu.age = 18; // 打印结构体的成员 printf("Student ID: %d\n", stu.id); printf("Student Name: %s\n", stu.name); printf("Student Age: %d\n", stu.age); return 0; } ``` 以上代码定义了一个名为"Student"的结构体类型,包含id、name和age三个成员。在main函数中,声明了一个名为"stu"的结构体变量,并给成员赋值。然后通过printf函数打印出结构体成员的值。 总的来说,C语言结构体是一种灵活、强大的数据类型,可以用来组织和操作复杂的数据结构,提高程序的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值