C语言结构体基本知识
文章目录
- 一、结构类型的定义
- 二、结构变量的定义和初始化
- 三、结构类型的嵌套
- 四、结构数组
- 1、结构数组的定义
- 2、结构数组的初始化
- 3、结构数组的引用
- 五、结构指针
- 六、结构长度和字节对齐问题
一、结构类型的定义
结构类型的定义类型为:
struct 类型名
{成员说明表列
};
例:
struct student
{char name[10]; //姓名int num; //学号float score; //成绩
};
struct 是结构体类型关键字,结构类型定义中的每个成员都有确定的类型和名称,称为结构体的“域”,每个“域”的后面都要有分号。
结构类型不是固定结构的类型,它由用户定义;用户可以定义相同或者不同结构的结构类型,系统均认为是不同的结构类型。
二、结构变量的定义和初始化
(1)用已定义的结构类型名定义变量:
struct student lili;
(2)在定义结构类型的同时定义结构变量:
struct student
{char name[10]; //姓名int num; //学号float score; //成绩
}lili;
(3)不定义结构类型名,直接定义结构变量(这种定义方法只能一次性定义该结构类型的变量):
struct
{char name[10]; //姓名int num; //学号float score; //成绩
}lili;
(4)自定义类型;
typedef struct student
{char name[10]; //姓名int num; //学号float score; //成绩
}STUDENT;
这样就自定义了一种类型STUDENT,它可以像基本类型一样使用,例如定义结构变量:
STUDENT lili;
这种定义方法的效果和前面三种是一样的。
三、结构类型的嵌套
结构的成员也可以是一个结构类型,这种形式称为结构的嵌套:
struct date
{int year;int month;int day;
};
struct student
{char name[10]; //姓名int num; //学号float score; //成绩struct data birthday; //生日
};
以上形式也可以写成:
struct student
{char name[10]; //姓名int num; //学号float score; //成绩struct {int year;int month;int day;}birthday;
};
四、结构数组
1、结构数组的定义
(1)先定义结构类型,用结构类型名定义结构数组:
struct student
{char name[10]; //姓名int num; //学号float score; //成绩
};
struct student stud[56];
(2)定义结构类型名的同时定义结构数组:
struct student
{char name[10]; //姓名int num; //学号float score; //成绩
}stud[56];
(3)不定义结构类型名,直接定义结构数组:
struct
{char name[10]; //姓名int num; //学号float score; //成绩
}stud[56];
(4)自定义类型:
typedef struct student
{char name[10]; //姓名int num; //学号float score; //成绩struct{int year;int month;int day;}birthday;
}STUDENT;
STUDENT stud[56];
2、结构数组的初始化
类似于普通数组,例:
struct student stud[2] = {{"莉莉", 1816702345, 87.5, 2000, 3, 3},
{"小明", 1816704567, 88, 2000, 12, 21}
};
3、结构数组的引用
(1)结构数组名[下标].成员名
stud[i].num //下标为i的数组元素的成员num
(2)结构数组名[下标].成员名.成员名.成员名. …
stud[0].birthday.day //下标为0的数组元素的成员birthday的成员day
结构数组和类型相同的结构变量一样,可以互相赋值
stud[0] = stud[1];
对于结构数组元素嵌套的结构类型,也可以相互赋值
stud[0].birthday = stud[1].birthday;
五、结构指针
可以定义结构类型的指针来访问结构变量或结构数组
struct student
{char name[10]; //姓名int num; //学号float score; //成绩
}lili,*p=&lili;
p 是指向结构变量 lili 的指针变量,准确地说是指向该变量结构数据区域的首地址。
运用结构指针变量访问结构变量的成员
(*p).num;
或
p->num;
六、结构长度和字节对齐问题
内存空间都是按照字节来划分的,理论上对任何类型的变量的访问可以从任何地址开始,但是实际并非如此,而是需要按照一定的规则在空间上排列,这就是对齐。对齐可以提高CPU处理数据的能力。
结构体的大小必须是其最大数据类型的整数倍。(不包括数组)
sizeof运算符可以计算结构类型的长度
sizeof(struct student) 或 sizeof(lili)
C语言结构体基本知识相关推荐
- C语言 结构体基础知识
什么是结构: 是一种程序员自己设计数据类型,由若干个不同的数据类型组成, 可用于描述一个事物各项数据. 1.设计结构(设计数据类型):// 仅仅是一种数据类型 typedef struct 结构名 { ...
- ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据
前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...
- c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)
来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...
- c语言 结构体的,c语言之结构体
c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...
- C语言结构体练习-互动粒子仿真
线下的C语言课,教完结构体的知识后,为了加深同学们对结构体知识的理解,带领大家一起实现了一个酷炫的互动粒子仿真小程序: 假设有15个粒子小球,要记录他们的速度.坐标,可以用数组实现: float ba ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
- C语言结构体——位段概念的讲解
前言 之前我对结构体内存分配的方式.对默认对齐数的指令修改做了详细的博客讲解,(C语言结构体详解 (2) 结构体内存对齐,默认对齐数,大家有兴趣的话可以去了解了解这方面的知识. 一. 什么是位段? 位 ...
- C语言结构体与结构体指针的使用
C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不 ...
- c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)
前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...
最新文章
- centos7 python3安装numpy_Centos7安装python3、numpy、scipy、matplotlib、pandas等
- linux 设备管理工具 udev 规则编写
- Pytorch install
- Uipath 学习栏目基础教学:5Uipath流程控制语句-整合
- Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题
- 第一章:OpenCV入门
- 架构设计-数据访问层简述
- C++笔记-远程线程注入
- 整天做办公室的我们要注意饮食啊
- React学习笔记二 通过柯里化函数实现带参数的事件绑定
- shell time 计算
- vue 动态添加组件
- 知识共享,让企业“活”起来
- Java模拟猜数字小游戏,有次数限制,并且输出猜测次数。
- 010-flutter dart代码后台执行,没有界面的情况下
- 计算机主机hs编码,电脑设备的进出口品名
- 代码设置margintop_js获取css属性,更改margin-top属性,给每个a标签的margin-top属性在原基础上 +5px...
- 软件工程(2019)结对编程第一次作业
- 我关注的一些技术微信公众号
- php导出excel失败原因,PHPExcel中导出Excel出错的一种可能原因
热门文章
- 2015计算机等级考试,2015计算机等级考试
- GAMLSS代码示例
- Lighthouse 激光定位技术开源了,但不是 Valve 做的
- CSS 画一个圆的背景 样式
- 软件测试行业薪资排名第五!一线城市,月薪多少才够上了及格线?
- python写篮球游戏_程序员们把“蔡徐坤打篮球”写成了一个游戏
- (短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码
- EE308-Lab8-AlphaSprint-Day6
- 微型计算机aspire1600x,终结性能过剩时代 评Acer 1600X小型机
- 【引言集】韩愈:师说