C语言第九讲,结构体
C语言第九讲,结构体
一丶结构体的定义
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
struct 结构体名{结构体所包含的变量或数组 };
结构体是一种不同数据类型的集合.可以包含不同数据.用来表示不同的方法.
例如:
struct stu {TCHAR *Name;int nId;.... }
结构体是一种复合类型,为什么这么说.因为结构体是程序员来进行定义以及编写的.
结构体的构成则是基本数据类型进行构成的.基本数据类型(char short int ...)是不可以在进行拆分了.
而结构体可以进行拆分.
二丶结构体变量
结构体虽然是程序员定义的.但是我们要使用.所以可以进行定义变量来使用
1.结构体定义
语法:
关键字 结构体定义名字 变量; struct stu st1;
则st1就是结构体变量.
2.结构体变量初始化
结构体变量初始化有几种常用方式.
1.定义的时候初始化struct stu{...} st1,st2; 声明了st1,st2变量 2.大括号初始化struct stu st1 = {..,..}; 3.单个成员赋值.st1.name = xxx. 4.同结构体变量可以给同结构体变量赋值.st1 = st2;
3.结构体的访问:
变量.类型名st1.name = "张三"
三丶结构体数组
1.结构体数组的定义
结构体数组,顾名思义.如果我们想使用多个这种变量.总不能定义多次的变量吧.那么我们直接定义为一个数组即可.
而这个就叫做结构体数组.
语法;
关键字 结构体名字 {.... }st1[5]; st1是结构体数组的首地址,表明了数组有5个st1一样的结构体.
当然,上面使用的是定义初始化.那么我们还可以使用变量直接定义进行定义数组.
struct stu st1[5];
2.结构体数组的初始化
结构体数组的初始化可以进行大括号初始化.
例如:
struct stu { .. }st1[5] = {{xxx,xxx},{xxx,xxx},{xxx,xxx},{xxx,xxx},{xxx,xxx}}; 想象成定义了五组,那么我对每一组进行初始化即可.
四丶结构体指针
1.定义
我们知道,C语言的灵魂就是指针.指针可以做的事情很多.
那么结构体和指针也很常用.
语法:
struct stu st1; struct stu *pSt1 =&st1; 则pst1保存了st1的首地址. 我们进行访问pst1->name = xxx;
注意的问题:
数组和指针组合的时候. 我们的 数组名字可以当做数组指针给指针赋值.
例如:
int a[5];int *p = a;
不用加取地址符号,但是结构体变量不能这样.你想赋值给指针.那么比如加上取地址符号(&)
例如:
struct stu *pst1 = &st1
2.访问
访问的时候我们的语法:
(*结构体指针).成员名字. 例如:(*pstu1).name = xxx; 或者pstu1->name = xxx;
五丶结构体指针作为函数参数问题
1.了解传值,传址的区别.
我们知道,一个结构体的成员可能有很多.当我们定义结构体的时候,其实底层会根据我们的结构体成员.
算出对齐值,然后进行申请内存.
当我们作为函数参数的时候,如果直接传结构体变量.那么我们的函数参数.相当于拷贝了一份.
这样特别消耗内存.
例如:
void ChangeValue(struct stu st1)//这里的st1是形参,如果传值,相当于新申请的变量 {st1.name = xxx; }int main() {struct stu st1;st1.name = yyy;ChangeValue(st1);}
上面的代码,我们在main中修改名字为yyy,当传入st1给函数的时候,其实 函数的st1相当于新申请
的变量.拷贝了我们的实际参数(main中传参位置的st1叫做实际参数),我们在函数内部改为xxx
其实不会改变实际参数的值,也就是说实际参数还是yyy
只不过传值的时候,形参相当于拷贝了一份而已.
2.传地址.
如果我们想改变实际参数的值,那么把地址传过去就可以了.我们要知道,指针(地址)就是4个字节.
所以我们拷贝过的是地址,根据地址修改里面的值,则可以进行修改.这个就是传址
例如:
void ChangeValue(struct stu *pst1)//这里的st1是形参,如果传值,相当于新申请的变量 {pst1->name = xxx; }int main() {struct stu st1;st1.name = yyy;ChangeValue(&st1);}
这样修改完之后,实际参数的值是YYY
转载于:https://www.cnblogs.com/iBinary/p/9051745.html
C语言第九讲,结构体相关推荐
- C语言指针与结构体详述
C语言指针与结构体详述 前言 一.数组概述 1.1 一维数组 1.2 二维数组 1.3 多维数组 二.字符数组和字符串 2.1 字符数组 2.2 字符串 2.3 字符串函数 2.4 拓展字符串函数 三 ...
- c语言获取结构体大小sizeof,C语言sizeof求结构体数组长度
C语言sizeof求结构体数组长度 C语言sizeof求结构体数组长度 #include typedef struct ss{ char a;//偏移量为0,大小为1,0能被1整除,=1 short ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct)C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- Go语言基础之结构体
转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...
- c语言 结构体ppt,C语言知识学习结构体.ppt
C语言知识学习结构体.ppt Chap 9 结构,9.1 输出平均分最高的学生信息 9.2 学生成绩排序 9.3 修改学生成绩,本章要点,什么是结构结构与数组有什么差别 有几种结构的定义形式,它们之间 ...
- C语言小记:结构体及其在内存中的储存形式
C语言小记:结构体及其在内存中的储存形式 1.结构体 结构体的作用:自定义一个包含多种不同数据类型的变量. 语法: struct 结构体名称 {结构体成员1:结构体成员2:结构体成员3:... } 定 ...
- C语言中的结构体,结构体中数组初始化与赋值
最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...
- Linux结构体变量报错,C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- Go语言学习、结构体
最近疫情比较严重,过年也不能出门,闲来无事,继续更新博客吧. 武汉加油! 我们来继续说下go语言中的结构体 比如我们现在想存储一个学生信息,如:学号.姓名.年龄.性别,等信息,按照我们以前的存储习惯, ...
- C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分
4 C语言编程题--结构体 **设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有 ...
最新文章
- Asp.net MVC中的ViewData与ViewBag
- 32位 shell.efi x86_Ubuntu 20.04 LTS或不再支持32位x86 (i386)
- 数据结构线性表博客作业总结
- 1988-B. 有序集合
- 项目回顾-PopupWindow
- 两阶段聚合(局部聚合+全局聚合)
- 栈的出入js实现_js 实现栈的结构
- CSDN下载频道积分规则2.1
- 关于WSO2 ESB
- 微信小程序map组件 markers 展示当前位置修改标记点图标
- 前端基础-Ajax对象
- 多模态信息用于推荐系统问题(MMDIN,hyperCTR)
- wordpress 背景_如何在WordPress中添加全屏背景图片
- 抖音弹幕解析过程 PB数据转json 解决乱码 所有语言通用思路
- Python的环境安装
- #Ubuntu# #机械键盘# 功能键/多媒体键切换无效
- Cell:代谢组学肠道微生物群介导生酮饮食的抗癫痫作用
- PCL:demeanPointCloud ❤️ 去点云质心
- Java 生成随机中文、英文姓名(下)
- ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以toad框架全流程讲解
热门文章
- 15.MongoDB的一致性(读关注与写关注)
- sourcetree使用说明
- qt socket 传递结构体 结构体中有list_GO语言入门-14、结构体
- java中卫语句详解
- readhat7mysql_Redhat7.3安装MySQL8.0.22的详细教程(二进制安装)
- file watchers怎么默认打开_python默认字典defaultdict进阶
- 6. 同步化器(Synchronizers)
- 【渝粤教育】国家开放大学2018年秋季 0714-21T建筑识图与CAD 参考试题
- 【渝粤教育】国家开放大学2018年春季 7215-21T电气传动与调速系统 参考试题
- 【Python实例第2讲】特征提取集成方法