计算机基础
理解指针
每个指针都对应一个类型,这个类型表明指针指向哪一类对象。特殊的void*类型代表通用指针。比如,malloc函数返回一个通用指针,然后通过显示强制类型转换或者复制操作那样的隐式强制类型转换,将他转成一个有类型的指针。异质的数据结构
C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。结构中各个组成部分用名字来引用。类似于数组,结构的所有组成部分都存放在一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段(field)的字节偏移。它以这些偏移作为存储器引用指令中的位移,从而产生 对结构元素的引用。数组的分配和访问
C语言中的数组是一种将标量数据聚集成更大数据类型的方式。程序的机器级表示-过程
一个过程调用包括将数据(以过程参数和返回追的形式)和控制从代码的一部分转移到另一部分。 A32程序用程序栈来支持过程调用。机器用栈来传递过程参数、返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。程序的机器级表示-控制
除了整数寄存器,CPU还维护着一组单个位的条件码(condition code)寄存器。常用的条件码有: - CF: 进位标志。最近的操作使最高位产生了进位。可以用来检查无符号操作数的溢出。 - ZF: 零标志。最近的操作得出的结果为0; - SF: 符号标志。最近的操作得到的结果为负数。 - OF: 溢出标志。最近的操作导致一个补码溢出(正溢出或负溢出)算术和逻辑操作
加载有效地址(load effective address)指令leal实际上是movl指令的变形。 整数算术操作,加载有效地址(leal)指令通常用来执行简单的算术操作。程序的及机器级表示-访问信息
大多数指令有一个或多个操作数,不同的操作数分为三种类型:- 立即数(immediate): 在AT&T格式汇编代码中,立即数书写是$后面跟一个整数,如:$-577或者$0x1F;浮点数
二进制小数,二进制小数点左移一位相当于这个数被2除,小数点向右移一位相当于将该数乘2.整数的表示
整型数据类型 32位机器上C语言的整型数据类型的取值范围:信息的表示
十六进制表示法 每台计算机都有一个字长(word size),指明整数和指针数据的标称大小。c语言的汇编分析
c源代码 编译成汇编:gcc -S -o main.s main.c -m32汇编笔记
.data段 包含了已经初始化的数据项的数据定义,已经初始化的数据在程序开始运行前就拥有了自己的值。这些值是可执行文件的一部分大端序还是小端序
大端序和小端序判断进制
进制举例c语言实现一个学生成绩管理系统
学生成绩管理系统,链表实现全排列
全排列leetcode题目-删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素, 使每个元素 只出现一次 ,返回删除后数组的新长度。leetcode题目-合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。leetcode题目-有效括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。leetcode题目-罗马数字转整数
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。 数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。 同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:leetcode题目-求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。leetcode题目-翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。leetcode题目-求两相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。leetcode题目-求两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。关于作者
程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm