滴水逆向三期笔记与作业——02C语言——08 结构体

本节课内容简单,仅截图记录

滴水三期

  • 一、什么是结构体
    • 结构体偏移
    • 结构体的定义与赋值
    • 结构体类型的参数
    • 结构体类型的函数返回
  • 二、作业

一、什么是结构体

结构体偏移

在这里插入图片描述

结构体的定义与赋值

在这里插入图片描述

结构体类型的参数

在这里插入图片描述
在这里插入图片描述

本质是内存数据的复制,将结构体中在内存存储的数据复制到新的内存中。与海哥教学视频中相比,现阶段的编译器做了较多的优化。

结构体类型的函数返回

在这里插入图片描述
在这里插入图片描述
rax中存放了一个内存地址,函数赋值时从rax所存储的地址(即rbp+0x10)开始存储数据,一共占用16字节大小,最后返回时,将起始值1的存储地址返回给rax,而rax在Function函数调用前代表了main函数的局部变量地址,即rbp-0x10。
总结就是使用地址来传递参数,而海哥教程里使用内存间相互复制值来传递,可见现阶段的编译器优化了过程。

二、作业

在这里插入图片描述

#include <stdio.h>
#include <string.h>struct Point{float x;float y;float z;
};struct Gamer{Point point;int blood;int level;
};void Function0(Gamer gamer){printf("坐标是:%.2f    %.2f    %.2f\n", gamer.point.x, gamer.point.y, gamer.point.z);printf("血量是:%d\n", gamer.blood);printf("等级是:%d\n", gamer.level);
}void Function1(){Gamer gamer;gamer.point.x = 1.1;gamer.point.y = 1.1;gamer.point.z = 1.1;gamer.blood = 100;gamer.level = 3;Function0(gamer);
}int main(int argc, char* argv[]){Function1();return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297011.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM之RAG理论(二)| RAG综述论文详解

论文地址&#xff1a;https://arxiv.org/pdf/2312.10997.pdf 大型语言模型&#xff08;LLMs&#xff09;展示了强大的能力&#xff0c;但在实际应用中仍面临挑战&#xff0c;如幻觉现象、知识更新缓慢&#xff0c;以及在回答中缺乏透明度。检索增强生成&#xff08;RAG&#xf…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理…

C++设计模式 #6 桥模式(Bridge)

动机 由于某些类型的固有的实现逻辑&#xff0c;使得它们具有两个变化的维度&#xff0c;乃至多个变化的维度。 如何应对这种“多维度的变化”&#xff1f;如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化&#xff0c;而不引入额外的复杂度 举个栗子 我们…

YUM和编译安装

一、安装Linux 1.编译安装&#xff0c;灵活性高&#xff0c;难度较大&#xff0c;可以安装较新的版本 2.rpm安装&#xff08;redhat&#xff09; linux包安装 rpm 软件名 3.yum yum是rpm升级版本&#xff0c;解决了rpm的弊端 2和3用的都是红帽打包好的软件包&#xff0c;能…

Elasticsearch基本使用

文章目录 概要一、核心概念二、索引操作2.1 创建索引2.2 判断索引是否存在2.3 查看索引2.4 打开、关闭索引2.5 删除索引 三、映射操作3.1 创建映射字段3.2 映射属性详解3.3 查看映射关系 四、文档增删改查4.1 新增文档4.2 查看单个文档4.3 查看所有文档4.4 _source定制返回字段…

小白也能搞定的Python选择排序

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 小白也能搞定的Python选择排序。全文3300字&#xff0c;阅读大约10分钟 选择排序&#xff08;Selection Sort&#xff09;是一种简单但有效的排序算法&#xff0c;它通过逐步…

IW5500手提式强光巡检工作灯

适用场所&#xff1a; 适用于铁路列检作业、工务巡道、车辆检修&#xff1b; 适用于冶金、厂电、网电等行业的巡查、设备检修等。 产品特点&#xff1a; 工作光、强光两种光设计&#xff0c;按动按钮可进行自由转换。 工作时间长&#xff0c;强光和工作光的连续工作时间分别在…

c++代码寻找USB00端口并添加打印机

USB00*端口的背景 插入USB端口的打印机&#xff0c;安装打印机驱动&#xff0c;在控制面板设备与打印机处的打印机对象上右击&#xff0c;可以看到打印机端口。对于不少型号&#xff0c;这个端口是USB001或USB002之类的。 经观察&#xff0c;这些USB00*端口并不是打印机驱动所…

制作自己的 Docker 容器

软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户必须保证操作系统的设置&#xff0c;各种库和组件的安装&#xff0c;只有它们都正确&#xff0c;软件才能运行。docker从根本上解决问题&#xff0c;软件安装的时候&#xff0c;把原始环境一模一样地复制过来。 以 koa-…

为什么c++的开源库那么少?

为什么c的开源库那么少&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「 C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;…

【JavaWeb学习笔记】15 - jQuery

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/jquery 目录 零、官方文档 一、jQuery基本介绍 1.基本介绍 2.原理图 二、JQuery入门使用 1.下载JQuery 2.jQuery快速入门 三、jQuery对象 1.什么是jQuery对象? 2.DOM对象转换成jQuery对象 …

C# 实现虚拟数字人

随着Ai技术的提升和应用&#xff0c;虚拟数字人被广泛应用到各行各业中。为我们的生活和工作提供了非常多的便利和色彩。 通过设置虚拟数字人的位置大小&#xff0c;可以让数字人可以在电脑屏幕各个位置显示&#xff1a; 虚拟数字人素材&#xff1a; 虚拟数字人(实际有语音&am…