![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 86
秋千水竹马道
秋千水 竹马道 一眼见你 万物不及
展开
-
栈(操作受限的线性表)---C语言版
目录一、栈的相关概念二、栈的基本操作三、顺序栈3.1 顺序栈的定义3.2 顺序栈的操作`InitStack(*S)`:构造一个空栈S`StackEmpty(S)`:若栈S为空栈,则返回TRUE,否则为FALSE。`Push(*S,e)`:插入元素e为新的栈顶元素`Pop(*S,*e)`:删除S的栈顶元素,并用e返回其值。`StackLength(S)`:返回栈S的元素个数,即栈的长度。`GetTop(S,*e)`:用e返回栈顶元素`StackTraverse(S)`:从栈底到栈顶依次遍历栈S,打印其中的元素原创 2021-12-30 18:15:51 · 1462 阅读 · 0 评论 -
从底层来看函数的调用和返回
目录一、引言二、参数和局部变量的实现2.1局部变量2.2参数---形参和实参2.3编译器是如何实现局部变量和参数的一、引言学c语言到现在,用了这么久的函数,可是我们为什么要使用函数呢?其实就是为了重用一段代码。使用函数,我们可以输入不同的值,通过返回值来得到结果。相关概念:在汇编语言中,使用指令"call"和"ret"通过改变PC(程序计数器)的值来改变执行顺序在这个过程中,也涉及到了数据的移动,像参数和返回值当然程序内部,还有一些局部变量二、参数和局部变量的实现2.1局部变量问原创 2021-12-28 17:57:55 · 646 阅读 · 0 评论 -
C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示
目录结构化数据表示一、内存地址:二、全局变量和局部变量的内存布局三、数据在内存中的表示四、数组在内存中的表示五、字符串在内存中的表示六、结构体的内存表示结构化数据表示一、内存地址:所有数据都存储在内存中内存是一个有编号的字节序列,以0x开始。那个编号计算内存的地址。通常来说,经过编译后变量名和变量类型都不见了,取而代之的是内存地址。二、全局变量和局部变量的内存布局通过一个例子,观察它们的内存地址#include<stdio.h>/*全局未初始化变量*/int globa原创 2021-12-18 21:29:26 · 1350 阅读 · 0 评论 -
8086指令集
8086指令集根据功能可划分为:1.数据传送类(Data transforming)2.算术运算类(Arithmetic operation)3.位与逻辑运算类(Bits and logic operation)4.字符串处理类(String operation)5.控制转移类(Branch and loop)6.处理器控制类(CPU control)8086指令集:描述一条指令,一般需要描述:1.指令的基本功能,也就是是它能干什么2.指令的影响:比如说,该指令如何影响PSW(FR原创 2021-12-17 16:24:56 · 2895 阅读 · 0 评论 -
指令一之操作数的寻址方式
目录一、引言视图指令段寄存器EIP如何发生改变二、操作数寻址方式(Operand-addressing Mode)1.寄存器寻址(Register Addressing)2.立即寻址(Immediate addressing)3.存储器寻址(Mermory addressing)3.1 直接寻址(direct addressing)3.2 寄存器间接寻址(register indirect addressing)3.3 寄存器相对寻址(register relative addressing)3.4 基址加原创 2021-12-16 20:39:34 · 4228 阅读 · 0 评论 -
遗落在时光里的静态链表(线性表的静态存储)---C语言版
总所周知,指针是c语言的灵魂,指针使得链表的实现简单明了起来。但是问题来了,在c语言还没有的时代,又想描述链表,怎么办呢?这就有了我们今天的主角静态链表首先,我们来解决一个最重要的问题,没有指针,怎么表示下一个元素的位置呢?当时的人们想出来的办法便是,用数组的下标来代替指针。我们把这个数组的下标叫做游标。第二个问题,当我们要往数组里插入元素时,如何确定数组里哪些分量未被使用,要插到哪个位置上呢?当我们删除一个元素的时候,要把这个删除后已经不存放数据的数组分量链接到哪里去,然后再次被使用呢?.原创 2021-12-09 14:39:11 · 1000 阅读 · 2 评论 -
循环链表(线性表的链式存储)---C语言版
目录循环链表一、循环单链表1、循环单链表定义2、循环单链表操作初始化表。构造一个空表。求表长3、含尾指针的循环单链表二、循环双链表1、循环双链表定义2、循环双链表操作初始化表。构造一个空表。根据数组创建双链表插入操作。在表L中的第i个位置上插入指定元素e。删除操作。删除表中L中第i个位置的元素,并用e返回删除的元素。三、 循环单链表完整源码四、 循环双链表完整源码循环链表特点:表中最后一个结点的指针域指向头结点,整个链表形成一个环。既然是环的话,那就不难想象,从表中任意一个结点出发都可以找到表中其他结原创 2021-12-07 22:46:15 · 1032 阅读 · 0 评论 -
c语言程序的生命周期(编写、预处理、编译、汇编、链接、执行)
目录程序的生命周期一、引言二、程序经历的六个阶段1、阶段一:编辑(Edit)2、程序编译系统(Programs Compilation System)阶段二:预处理(Preprocess)阶段三:编译(Compile)阶段四:汇编(Assemble)阶段五:链接(Link)3、阶段六:执行(Execute)程序的生命周期一、引言什么是计算机系统(Computer System)?计算机系统是一起工作以运行计算机程序(Computer Program)的硬件和软件组件(hardware and so原创 2021-12-01 20:21:29 · 3547 阅读 · 1 评论 -
单链表(线性表的链式存储)---C语言版
单链表(线性表的链式存储)—C语言版一、相关说明逻辑上相邻的元素在物理位置上不一定相邻。优点:没有了顺序存储所具有的弱点(也就是说:插入和删除不需要移动元素,而只需要修改指针。)同时,由于不借助数组实现,在定义链表时,无需指定它的长度。缺点:也失去了顺序存储的优点非随机存取(不能直接找到某个特定序号的结点,需要从表头开始遍历)存储密度降低(除了存储本身信息外链表还要存储指针)二、单链表的定义定义线性表的链式存储又称为单链表,它是指通过一组任意的存储单位来存储线性表中的元原创 2021-12-07 22:46:29 · 2445 阅读 · 0 评论 -
C语言中指针传参
目录C语言中指针传参一、如何改变参数的值1、常见的错误写法:2、解决办法使用指针二、与return进行比较1、使用return返回值:2、使用指针改变多个参数的值三、传入的参数是指针如何处理?使用指针的指针C语言中指针传参一、如何改变参数的值1、常见的错误写法:由于变量会随着栈的退出而销毁,所以下面的函数无法改变a的值。#include<stdio.h>void f(int b){ //参数b初始化为1 b=3;//改变b的值为3}//随着函数的结束,变量b被销毁,a原创 2021-11-27 18:09:40 · 8769 阅读 · 0 评论 -
顺序表(线性表的顺序存储)---C语言版
目录顺序表一、顺序表的定义二、顺序表上基本操作的具体实现1.`InitList_Sq(*L)`:初始化表。构造一个空的顺序表。分类一:主函数里声明的是一个指向顺序表的指针分类二:主函数里声明的是一个顺序表2. `Length(L)`:求表长。3.`ListInsert_Sq(*L,i,e)`:插入操作。在顺序表L中的第i个位置上插入指定元素e。4.`ListDelete_Sq(*L,i,*e)`:删除操作。删除表中L中第i个位置的元素,并用e返回删除的元素。5.`LocateElem(L,e)`:按值查找操原创 2021-11-27 15:36:47 · 1979 阅读 · 0 评论 -
垃圾回收GC经典算法
目录垃圾回收GC(Garbage Collection)1、什么是垃圾2、为什么要有GC经典的GC算法1、基本的一些概念2、标记清除算法(Mark and Sweep)3、复制法(copy)4、引用计数法(Reference Counting)5、分代式垃圾回收法(Generational GC)垃圾回收GC(Garbage Collection)1、什么是垃圾c语言中malloc申请完内存后,需要手动回收free。当忘记回收时就产生了垃圾2、为什么要有GC经常忘记回收容易出现多次回收原创 2021-11-23 20:21:53 · 1169 阅读 · 0 评论 -
C语言中常见的内存相关的Bugs
目录常见的错误参考经典的scanf bug指针未正确初始化指针被释放时没有置空不要用return语句返回指向“栈内存”的指针内存覆盖常见一常见二常见三常见四常见五二次释放引用已经释放的内存内存泄漏常见的错误参考经典的scanf bugscanf需要传入的的变量对应的地址#include<stdio.h>int main(void){ int i; double j; //wrong!!!错误的写法 scanf("%d,%ld",i,j); //下面是正原创 2021-11-21 22:53:51 · 749 阅读 · 0 评论 -
C语言之指针
目录指针1、指针所占内存大小2、`*` 和 `&`3、 `++`自增与`--`自减与`*`指针间接访问cp++与++cpcp++++cp*cp++与 *++cp*cp++*++cp++*cp与(*cp)++++*cp(*cp)++4、指针的指针指针1、指针所占内存大小数据的地址和数据本身没有任何关系,由于指针是间接寻址,所以猜测所有类型的指针大小相同指针大小是由当前CPU运行模式的寻址位数决定,是固定的。证实如下:pointer.c#include<stdio.h>#原创 2021-11-20 20:16:52 · 778 阅读 · 0 评论 -
C语言中变量的静态分配(Static)和动态分配(Stack&Heap)
C语言中变量的静态分配(Static)和动态分配(Stack&Heap)变量的静态分配在编译和链接时确定的绝对地址。在程序运行时无法再改变其内存大小。当然,你可以修改程序,再重新编译它,但这样灵活性低。包含了哪些变量?全局变量和局部变量(staic关键字)全局变量和被static修饰的局部变量都可以将函数中此变量的值保存到下一次调用。但是被static修饰的局部变量对外不可见,仅在此函数中可见。保证了数据的安全性。通过一个例子进行诠释static.c#include原创 2021-11-19 17:19:51 · 3324 阅读 · 0 评论