文章目录

  • 一、结构类型的定义
  • 二、结构变量的定义和初始化
  • 三、结构类型的嵌套
  • 四、结构数组
    • 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语言结构体基本知识相关推荐

  1. C语言 结构体基础知识

    什么是结构: 是一种程序员自己设计数据类型,由若干个不同的数据类型组成, 可用于描述一个事物各项数据. 1.设计结构(设计数据类型):// 仅仅是一种数据类型 typedef struct 结构名 { ...

  2. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

  3. c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

    来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...

  4. c语言 结构体的,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  5. C语言结构体练习-互动粒子仿真

    线下的C语言课,教完结构体的知识后,为了加深同学们对结构体知识的理解,带领大家一起实现了一个酷炫的互动粒子仿真小程序: 假设有15个粒子小球,要记录他们的速度.坐标,可以用数组实现: float ba ...

  6. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  7. C语言结构体——位段概念的讲解

    前言 之前我对结构体内存分配的方式.对默认对齐数的指令修改做了详细的博客讲解,(C语言结构体详解 (2) 结构体内存对齐,默认对齐数,大家有兴趣的话可以去了解了解这方面的知识. 一. 什么是位段? 位 ...

  8. C语言结构体与结构体指针的使用

    C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不 ...

  9. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

最新文章

  1. centos7 python3安装numpy_Centos7安装python3、numpy、scipy、matplotlib、pandas等
  2. linux 设备管理工具 udev 规则编写
  3. Pytorch install
  4. Uipath 学习栏目基础教学:5Uipath流程控制语句-整合
  5. Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题
  6. 第一章:OpenCV入门
  7. 架构设计-数据访问层简述
  8. C++笔记-远程线程注入
  9. 整天做办公室的我们要注意饮食啊
  10. React学习笔记二 通过柯里化函数实现带参数的事件绑定
  11. shell time 计算
  12. vue 动态添加组件
  13. 知识共享,让企业“活”起来
  14. Java模拟猜数字小游戏,有次数限制,并且输出猜测次数。
  15. 010-flutter dart代码后台执行,没有界面的情况下
  16. 计算机主机hs编码,电脑设备的进出口品名
  17. 代码设置margintop_js获取css属性,更改margin-top属性,给每个a标签的margin-top属性在原基础上 +5px...
  18. 软件工程(2019)结对编程第一次作业
  19. 我关注的一些技术微信公众号
  20. php导出excel失败原因,PHPExcel中导出Excel出错的一种可能原因

热门文章

  1. 2015计算机等级考试,2015计算机等级考试
  2. GAMLSS代码示例
  3. Lighthouse 激光定位技术开源了,但不是 Valve 做的
  4. CSS 画一个圆的背景 样式
  5. 软件测试行业薪资排名第五!一线城市,月薪多少才够上了及格线?
  6. python写篮球游戏_程序员们把“蔡徐坤打篮球”写成了一个游戏
  7. (短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码
  8. EE308-Lab8-AlphaSprint-Day6
  9. 微型计算机aspire1600x,终结性能过剩时代 评Acer 1600X小型机
  10. 【引言集】韩愈:师说