当前位置:网站首页>【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体
【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体
2022-06-10 18:27:00 【你我皆为凡人】
作者:你我皆为凡人
博客主页:你我皆为凡人的博客
名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!
觉得博主文章写的不错的话,希望大家三连(关注,点赞,评论),多多支持一下!!
系列作品:

文章目录
目录
前言
本文讲解了关于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;
}

结构体成员访问
结构变量的成员是通过点操作符访问的,接受两个操作数
而结构体指针访问指向变量的成员,我们有时候需要得到的不是一个结构体的变量,而是指向一个结构体的指针,如下面代码中的函数,需要用箭头指向访问成员
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
效果是真的不错,我亲眼看到他痘痘都没有的,具体情况找他了解
边栏推荐
- 【web】個人主頁web大作業「課錶」「相册」「留言板」
- 【 Web 】 page d'accueil personnelle 】 Programme d'études 】 albums de photos 】 babillard d'information 】
- Adobe Premiere基础-介绍,配置,快捷键,创建项目,创建序列(一)
- 2022.05.24(LC_674_最长连续递增序列)
- Wireshark learning notes (I) common function cases and skills
- 2022.05.25(LC_718_最长重复子数组)
- Mysql8.0 (summary of new features)
- Introduction to ad18 device library import
- OPENCV 检测人脸 不依赖于任何第三方库
- 第二章 数据类型(一)
猜你喜欢

Live broadcast preview | deconstruct OLAP! The new multidimensional analysis architecture paradigm is fully open! Apache Doris will bring five big issues!

2022.05.27(LC_647_回文子串)

第二章 数据类型(一)

直播预告 | 社交新纪元,共探元宇宙社交新体验

第一章 SQL操作符

Code solution of simplex method (including super detailed code notes and the whole flow chart)

mysql8.0(新特性小结)

Design and implementation of online ordering system based on SSM Rar (project source code)

2022.05.29(LC_6078_重排字符形成目标字符串)

Debugging skills
随机推荐
Ruixin micro rk1126 platform platform porting libevent cross compiling libevent
c(指针-02)
mysql(17-觸發器)
Chapter 6 relational data theory exercise
2022.05.28(LC_5_最长回文子串)
openSSL1.1.1编译错误 Can‘t locate Win32/Console.pm in @INC
【数据库语言SPL】写着简单跑得又快的数据库语言 SPL
Adobe Premiere foundation - material nesting (animation of Tiktok ending avatar) (IX)
Adobe Premiere foundation - opacity (matte) (11)
数据治理经典6大痛点?这本书教你解决
北京地铁票务系统
Adobe Premiere Foundation (animation) (VII)
多通道信号数据压缩存储
mysql(17-触发器)
Wireshark learning notes (II) detailed explanation of forensics analysis cases
基于谱加权的波束方向图分析
Lingo12 software download and lingo language introduction resources
Openssl1.1.1 VS2013-编译教程
Some summary about YUV format
SQL 函数