<C>.初识结构体

目录

 

什么是结构体?

语法结构:

如何创建变量: 

 如何初始化?

 如何访问?

<结构体变量.结构体成员>

 <结构体指针→结构体成员>​

结构体传参:


 

什么是结构体?

 

<类似于mysql建表的结构,对一个复杂对象进行描述>
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
结构的成员可以是标量、数组、指针,甚至是其他结构体。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

语法结构:

struct tag     
{
member-list;
}variable-list;

//struct 结构体标志  tag 结构体标签
//member-list 成员列表(变量)
//variable-list 变量列表
//结构体类型的声明
struct stu
{
	char name[20];
	int age;
	char sex[8];
	float score;
}s1,s2,s3; //s1 s2 s3是通过stu这个类型创建的变量,可以写一个,也可以一个都不写
//s1 s2 s3是全局变量


int main()
{
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

int main()
{
	//s4 s5是局部变量
	//struct stu才是结构体类型,不能随便省略
	struct stu s4;
	struct stu s5;
	return 0;
}

 我可以使用typedef类型重命名1b9b473a713b460eb59acace22ba5c31.png

当然 我还有另一种写法 ,也是没有任何问题:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

如何创建变量: 

 

 

 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_14,color_FFFFFF,t_70,g_se,x_16

 如何初始化?


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_18,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

 如何访问?

结构体访问操作符:. 和 →


<结构体变量.结构体成员>

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_14,color_FFFFFF,t_70,g_se,x_16
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

 <结构体指针→结构体成员>
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

 但一般不这样写,这样就复制成了两份。我们一般传地址:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

 同时我还可以进行赋值:
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_15,color_FFFFFF,t_70,g_se,x_16

 整数我可以直接改,但是数组,不能。数组是个地址,要使用<string.h>strcpy函数:
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_15,color_FFFFFF,t_70,g_se,x_16

这个✳是什么,其实没有多大的用,只是建议使用

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_19,color_FFFFFF,t_70,g_se,x_16

结构体传参:
 

struct S
{
	int data[1000];
	int num;
};
struct S s = { {1,2,3,4}, 1000 };
//结构体传参
void print1(struct S s)
{
	printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
	printf("%d\n", ps->num);
}
int main()
{
	print1(s); //传结构体
	print2(&s); //传地址
	return 0;
}

 print1和print2,哪个好?

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXV1ZWtpIFhZMzk=,size_20,color_FFFFFF,t_70,g_se,x_16

 具体看后期<函数栈帧的创建和销毁讲解>


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值