当前位置: 首页 > news >正文

结构体知识点

目录

1.结构的声明

结构体变量的创建和初始化

typedef 对匿名结构体类型重命名(简化)

举例子代码和分析

2. 结构体内存对⻬

2.1 对⻬规则


1.结构的声明

struct tag
{member-list;
}variable-list;

例如描述⼀个学⽣:

struct Stu
{char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 
}; //分号不能丢 

结构体变量的创建和初始化

#include <stdio.h>
struct Stu
{char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 
};
int main()
{//按照结构体成员的顺序初始化 struct Stu s = { "张三", 20, "男", "20230818001" };printf("name: %s\n", s.name);printf("age : %d\n", s.age);printf("sex : %s\n", s.sex);printf("id : %s\n", s.id);//按照指定的顺序初始化 struct Stu s2 = { .age = 18, .name = "lisi", .id = "20230818002", .sex = 
"⼥" };printf("name: %s\n", s2.name);printf("age : %d\n", s2.age);printf("sex : %s\n", s2.sex);printf("id : %s\n", s2.id);return 0;
}

typedef 对匿名结构体类型重命名(简化)

typedef struct Node
{int data;struct Node* next;
}Node;

举例子代码和分析

struct Student
{char name[6];int sum;
}stu1;//这是定义全局变量,这里的stu1是结构体变量
typedef struct Person
{char name[20];
}Stu;// typedef和P将Person重命名,这里的Stu是类型
//stu1= { "li",123 };//这样写是错误的相当于赋值
struct Student stu1 = { "li",123 };//因为上面定义完,所以这行表达式是强转为结构体类型。
stu1 = (struct Student){ "li",123 };//这样写也对,都是强制转换成结构体类型。
printf("%s  %d\n", stu1.name, stu1.sum);//.....的优先级是最高的
struct Student stu2 = { .sum = 123,.name = "li" };//这个是按自己的顺序是初始化。
printf("%s  %d\n", stu2.name, stu2.sum);
	struct Student stu3[3] = { {"liu",1},{"li",2},{"su",3} };//这是结构体数组,可以放多个。printf("%s  %d\n", stu3[0].name, stu3[0].sum);//也可以用循环打印,注意下标printf("%s  %d\n", stu3[1].name, stu3[1].sum);printf("%s  %d\n", stu3[2].name, stu3[2].sum);
	Stu stu4 = { "liu" };//stu4是变量printf("%s \n", stu4.name);

2. 结构体内存对⻬

我们已经掌握了结构体的基本使⽤了。 现在我们深⼊讨论⼀个问题:计算结构体的⼤⼩。 这也是⼀个特别热⻔的考点: 结构体内存对⻬

2.1 对⻬规则

⾸先得掌握结构体的对⻬规则:

1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处

 2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。

对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。

VS 中默认的值为 8  

Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩

3.结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的 整数倍。

4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构 体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [JDK工具-6] jmap java内存映射工具
  • 聊聊ChatGPT的本质
  • Java基础语法---Stringjoiner
  • ChatGPT技术演进简介
  • 【STM32】 独立看门狗配置方法
  • Python编程的黑暗魔法:模块与包的神秘力量!
  • 解决vite打包只生成了一个css和js文件问题
  • 五分钟搭建一个Suno AI音乐站点
  • 手搓堆(C语言)
  • 01.爬虫---初识网络爬虫
  • react 函数组件 开发模式默认被渲染两次
  • Java 面向数据编程-DOP
  • 基于微信小程序的医院医疗设备管理系统设计
  • Vue的学习 —— <Echarts组件库技术应用>
  • 简单介绍十款可以免费使用的API测试工具
  • [数据结构]链表的实现在PHP中
  • 07.Android之多媒体问题
  • Angular 2 DI - IoC DI - 1
  • laravel 用artisan创建自己的模板
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring security oauth2 password授权模式
  • SpringBoot几种定时任务的实现方式
  • vuex 笔记整理
  • XForms - 更强大的Form
  • Zsh 开发指南(第十四篇 文件读写)
  • 程序员该如何有效的找工作?
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于Android乐音识别(2)
  • 开源地图数据可视化库——mapnik
  • 聊聊hikari连接池的leakDetectionThreshold
  • 浏览器缓存机制分析
  • 手写一个CommonJS打包工具(一)
  • 我是如何设计 Upload 上传组件的
  • 怎样选择前端框架
  • 正则表达式
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (web自动化测试+python)1
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (三)elasticsearch 源码之启动流程分析
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net core控制台应用程序初识
  • .NET NPOI导出Excel详解
  • .Net Web项目创建比较不错的参考文章
  • .NET 指南:抽象化实现的基类
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net和php怎么连接,php和apache之间如何连接
  • .net连接oracle数据库
  • @RequestMapping 的作用是什么?