C语言结构体

什么是结构体,结构体怎么来的

结构体是一些值的集合,是用户自定义的类型。里面包含了一些值,这些值被称为成员变量。结构体的每个成员变量可以是不同类型的变量。
结构体的关键字是 struct ,结构体的大括号后面一定要有分号。

结构体的创建

现在创建一个学生的结构体:有年龄,名字,id 。并且对其赋初值

struct Stu
{
	int age;
	char name[20];
	int id;
};
int main()
{
	struct Stu s = { 18,"张三",201202203 };
	return 0;
}

通过创建结构体类型,然后在 main 函数里面对其初始化,初始化的时候先创建一个结构体变量。这里创建的结构体变量就是 s ,然后大括号初始化,每个变量之间用逗号隔开。

当然,结构体变量也可以创建在 main 函数外面:

struct Stu
{
	int age;
	char name[20];
	int id;
};
struct Stu s = { 18,"张三",201202203 };

这样创建的结构体变量也可以被访问到。

也可以通过 typedef 对结构体的访问方式进行重定义。

typedef struct Stu
{
	int age;
	char name[20];
	int id;
}stu;		//通过 typedef 把 struct Stu 定义为 stu
int main()
{
	struct Stu s = { 18,"张三",201202203 };	//这个是通过结构体创建的
	stu s = { 18,"张三",201202203 };		//这个是通过 typedef 重定义创建的
	return 0;
}

也可以之间在创建结构体的时候创建出结构体变量

struct Stu
{
	int age;
	char name[20];
	int id;
}p1;

这就是在结构体创建的时候直接创建出结构体变量,这里创建的结构体变量是可以直接使用的。

结构体的输出

main函数内使用结构体

结构体输出内容也就是访问结构体,访问结构体的方法是:结构体变量.结构体成员。就拿上面的这个结构体来举例。

struct Stu
{
	int age;
	char name[20];
	int id;
};
int main()
{
	struct Stu s = { 18,"张三",201202203 };
	printf("%d %s %d\n", s.age, s.name, s.id);
	return 0;
}

在这里插入图片描述
这里就是通过 “.” 来访问结构体成员

结构体传参

可以把结构体当作一个参数来使用,因为是结构体类型,所以接收结构体参数的时候,可以拿结构体来接收,也可以拿结构体指针来接收。拿结构体指针来接收更好一些,因为这里有一个压栈(函数栈帧)的过程。如果是值传递的话,就对栈区的消耗过大,所以使用指针传递,能有效的提高性能。

函数压栈,函数栈帧

void print1(struct Stu s)		//值传递方式
{
	printf("%d\n", s.age);
	printf("%s\n", s.name);
	printf("%d\n", s.id);
}
void print2(struct Stu* s)		//指针传参方式
{
	printf("%d\n", s->age);
	printf("%s\n", s->name);
	printf("%d\n", s->id);
}
int main()
{
	struct Stu s = { 18,"张三",201202203 };
	print1(s);
	print2(&s);
	return 0;
}

在这里插入图片描述
都能有效输出结果,但我们使用结构体的时候还是传地址,使用指针更好一些,为了提升性能。

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lockey-s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值