初阶结构体

在这篇文章中我们只讲一些结构体的一些基础的知识,后续会继续补充关于结构体的高阶知识。

1.结构体声明

1.1结构体的基本知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

结构可以用来描述复杂对象,在生活中有很多对象并不是单一属性的,比如一个人,就有姓名年龄身高体重学校电话等等属性,C语言中的结构体就可以用来描述复杂属性的对象。

1.2结构的声明

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

上面的代码中,struct是一个结构体关键字,tag是结构的标签、名字。member-list是成员列表,variable-list是指在结构体进行声明时就创建的结构体变量名,在这里创建的结构体变量是全局变量。

结构体声明是不占内存空间的,只有用结构体去创建结构体变量的时候才申请空间。结构体是一种自定义类型。

1.3结构成员的类型

结构成员的类型可以是标量、数组、指针甚至是其他结构体。

struct stu
{
	char name[20];
	int age;
	char sex[5];
	char tele[20];
};

1.4结构变量的定义和初始化

我们可以在声明的时候定义结构体全局变量,也可以在函数内部定义结构体局部变量;

结构体初始化可以用一个大括号,在大括号里面对成员变量依次赋初值;

结构体嵌套是初始化也是用大括号赋初值,里面的结构体再用一个大括号赋初值。

结构体初始化也可以不完全初始化,比如只对前几个成员变量赋初值。

#include<stdio.h>

struct stu
{
	char name[20];
	int age;
	char sex[5];
	char tele[20];
};
struct school
{
	struct stu s;
	char tele[20];
	char teacher[20];
	int count_stu;
};
int main()
{
	struct stu s1 = { "zhangsan",13,"男","111111111111" };
	struct stu s2 = { "zhangsan",11 };
	struct school S = { {"zhangsan",13} };
	struct school S1 = { { "zhangsan",13,"男","111111111111" },"123456789","lisi",500 };

	return 0;
}

2.结构体成员的访问

在前面操作符详解中我们已经降到了两个操作符的成员访问变量

结构体变量.成员变量;

结构体指针->成员变量;

3.结构体传参 

结构体传参也分为传值和传址,当我们要在函数内部修改结构体内部的成员变量时,我们就要传结构体的地址。

在前面的函数栈帧中我们讲到函数传参是要压栈的,当我们结构体内存很大时,压栈就会浪费时间和空间,参数压栈时的系统开销就比较大,导致性能下降,所以我们最好传址调用结构体,节约时间和空间。如果我们不想函数内部修改结构体内的变量时,我们可以在定义函数时用const修饰结构体指针。

void print(struct stu s)

{
	printf("%s ", s.name);
	printf("%d ", s.age);
	printf("%s ", s.sex);
	printf("%s\n", s.tele);
}

void Print(const struct stu* s)
{
	printf("%s ", s->name);
	printf("%d ", s->age);
	printf("%s ", s->sex);
	printf("%s\n", s->tele);
}

这篇文章只对结构体做初步认识,深入的知识会在后续C语言专栏中更新。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值