【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体

  作者:你我皆为凡人

 博客主页:你我皆为凡人的博客

 名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!

 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!

 系列作品:

 牛客网习题练习直达

 C语言编程刷题篇

 经典题型系列

 【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体_第1张图片

文章目录

目录

文章目录

前言

结构体类型的声明

结构体初始化

 结构体成员访问

结构体传参

 习题练习入口

题外话


前言

本文讲解了关于C语言中结构体类型的声明,结构体初始化 ,结构体成员访问 ,结构体传参等等一系列新手不容易掌握的知识点


提示:以下是本篇文章正文内容,下面案例可供参考

结构体类型的声明

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

我们在之前的数组是一组相同类型元素的集合,结构我们见过char,short,int long,long long等等都被称作内置类型,描述单一类型的,而在我们生活中有很多复杂对象,比如说描述人需要名字,电话,性别,身高等,描述一本书需要书名,作者,单价,等等,而描述复杂对象就会使用到结构体

//结构体的声明
struct peo1
{
	char name[20];
	char sex[5];
	int high;
	char tel[12];
};//一般情况下使用这种

struct peo2//结构体名
{
	char name[20];//结构体成员列表
	char sex[5];
	int high;
	char tel[12];
}p1,p2;//两个全局的结构体变量
int main()
{
	struct peo1 p1;//结构体变量的创建
	return 0;
}

 创建的struct peo1 是类型,实际上是没有占用空间的,而用这个类型创建出来的p1变量才会占用空间,就相当于类型是图纸,而p1是房子,图纸并不会占用面积,盖房子才会占用面积

结构的成员可以是标量,数组,指针,甚至可以结构体里包含一个结构体,注意包含的结构体必须存在,否则无法使用

结构体初始化

结构体的初始化指的是在创建的时候同时赋予结构体一个值

struct peo
{
	char name[20];
	char sex[5];
	int high;
	char tel[12];
};
struct st
{
	struct peo p;
	int num;
	float f;
};
int main()
{
	struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
	struct st p2 = { {"lisi","女",167,"15545567544"},122,2.33 };
	printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);
	printf("%s %s %d %s %d %f\n",p2.p.name,p2.p.sex,p2.p.high,p2.p.tel,p2.num,p2.f);
	return 0;
}

【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体_第2张图片

 结构体成员访问

结构变量的成员是通过点操作符访问的,接受两个操作数

而结构体指针访问指向变量的成员,我们有时候需要得到的不是一个结构体的变量,而是指向一个结构体的指针,如下面代码中的函数,需要用箭头指向访问成员

struct peo
{
	char name[20];
	char sex[5];
	int high;
	char tel[12];
};
void print1(struct peo* p1)
{
	printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
}
void print2(struct peo p1)
{
	printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
}
int main()
{
	struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
	print1(&p1);
	print2(p1);
	return 0;
}

结构体传参

void print1(struct peo* p1)
{
	printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
}
void print2(struct peo p1)
{
	printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
}
int main()
{
	struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
	print1(&p1);
	print2(p1);
	return 0;
}

 其实传参在上面已经有所涉及,函数传参分为两种,第一种是把地址给传过去,第二个是把结构体传过去,那么这两种方式哪个更好呢?

我们在之前了解到,函数传参的时候,是需要压栈的,如果传递一个结构体对象,传过去的形参是实参的一份临时拷贝,在开辟一块儿空间,造成空间的重复和浪费,传递过去一个结构体对象的时候,结构体过大的话,参数压栈的系统开销比较大,会导致性能的下降,而如果我们传过去地址,地址是4个或者8个字节,而用指针来接收也是4或者8个字节来接收首元素的地址,我们也可以找回去实参的那份内容

所以结构体传参的时候,要尽量传结构体的地址

 习题练习入口

看完这些不具体操作操作那么是不可以的,可以点击上方直达去练习一些有关习题,也可以随便看一看C语言的一些习题,练习练习选择题和编程题,让自己的知识得到巩固,直接点入标题就可直达,另外想获得大厂内推资格也可以去看看:

大厂内推

题外话

在这里博主插句题外话,可直接跳过,我有一个朋友因为满脸痘印毁脸三年,现在恢复的很好,大家如果有同样的困惑和问题,可以去他朋友圈看看加他了解一下:lpy16128227
效果是真的不错,我亲眼看到他痘痘都没有的,具体情况找他了解

你可能感兴趣的