
C语言
文章平均质量分 72
风吹雨淋
这个作者很懒,什么都没留下…
展开
-
C语言:函数栈帧
这两个寄存器存放的是地址,用来维护函数栈帧(正在调用哪个函数,两个寄存器就维护哪个函数的栈帧)每一个函数都要创建一个空间(栈区创建,栈区的使用是先使用高地址,后使用低地址)esp值减去 0E4H(此时两个寄存器新维护了一段空间)必须理解这两个寄存器(寄存器是独立于内存的)esp的值赋值给ebp(更新了ebp的指向)形参的传入是在main函数栈帧里面完成的。三次push是压入三个元素(不用管)main函数是被别人调用的。局部变量是怎样创建的。原创 2023-06-01 18:23:49 · 668 阅读 · 0 评论 -
C语言:数组指针&函数指针&回调函数
0是一个整数,先强转成函数的地址,(对函数的地址解引用就是函数)再解引用变成了函数,再加括号调用该函数。调用地址为0的函数,但0不能当做一个地址,所以将0强转为void(*)()类型的函数。*的结合优先级低于( )和 [ ]。原创 2023-01-12 17:18:50 · 1149 阅读 · 0 评论 -
C语言:整数的存储方式
最后将32位的补码转化为8个十六进制(每4位二进制,转化成1位16进制),32个二进制位转换成为8个十六进位。各种类型数据均分为有符号和无符号类型,当定义一个int类型或char类型的数,计算机默认其为有符号类型。char类型只有一个字节八位,只能保存-128~127之间的值,-1+1后,会将1省略变成0。有符号char类型,十进制数值表示范围是(-128~127);有符号数二进制首位是符号位,0正1负;有符号数和无符号数均有原码、反码、补码。计算机计算用补码,人看到的是原码。ab是有符号,c是无符号。原创 2023-01-11 21:13:46 · 1356 阅读 · 0 评论 -
C语言:隐式类型转换
就是变成整型:有符号补符号位,无符号补0。其余类型计算会发生算术转换。原创 2023-01-11 21:13:05 · 161 阅读 · 0 评论 -
C语言:笔记
一个全局变量可以在整个工程的其它文件内部能被使用,是因为全局变量具有外部链接属性,当全局变量被static修饰时,这个外部链接属性就变成了内部链接属性(该全局变量只能在自己所在源文件中使用,感觉是作用域变小了)extern,用于声明,该变量或者函数已经在其它文件中定义,在此处声明。default,前面case没有匹配,就走default。auto,定义自动变量,自动创建回收,等于局部变量。函数链式访问,把一个函数返回值当作另一个函数的参数。修饰函数和修饰全局变量一样,改变链接属性。原创 2023-01-10 19:11:50 · 469 阅读 · 0 评论 -
C语言:大小端
指针的类型决定其解引用操作可访问几个字节,char指针解引用只能访问或操作一个字节的内容,将a的地址强制转化成char*类型,再用char指针访问首字节。1的十六进制为0x00000001,若是小端存储,则第一个字节值为1,若是大端存储,第一个字节的值为0;这个规律是将数据按字节(00,FF每两个数是一个字节)的顺序进行存储,而不是按二进制位的顺序。记忆方法 小小小:数据 小 权值位放在 小 地址处,叫 小 端 ,计算机只从低地址处开始访问。原创 2023-01-08 12:17:36 · 719 阅读 · 1 评论 -
C语言:浮点型存储方式
E:是一个无符号整数,由科学计数法计算出M的有几个10次方,再加127或者1023;再将该值转化成二进制。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。1(S符号位) 8(E阶码) 23(M尾码)省略首位1。任意一个二进制浮点数V可以表示成下面的形式。M:由浮点数转化成二进制数表示。原创 2023-01-07 22:47:23 · 564 阅读 · 0 评论 -
C语言:柔性数组
柔性数组:结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员struct S{ int i; int a[0]; //未知大小的-柔性数组成员-数组的大小可以调整};int main (){ struct S s; printf("%d\n",sizeof(s)); //输出的结果是4//既要创建结构体对象,又要使数组大小可以调整 struct S* ps=(struct S*)malloc(sizeof(struct S)+5*sizeof(int)) //原创 2021-08-18 11:50:02 · 245 阅读 · 0 评论 -
C语言:位段、枚举、共用体
位段(常见于网络底层开发):位段也是一种结构体类型,用结构体实现位段。位段与结构体声明类似,但有两点不同:位段的成员必须是int,unsigned int,或signed int,char位段的成员名后边有一个冒号和一个数字申请内存的方式是从二进制位出发struct S{ int a:2 ;//表示申请一个二进制位,两种状态(冒号+数字) int b:5 ; int c:10; int d:30;//d的大小不能超过32位}; int原创 2021-08-18 11:45:37 · 292 阅读 · 0 评论 -
C语言:编译过程&预处理命令
预处理----编译----汇编----链接预处理.h .c预处理后成.i编译.i编译后生成汇编文件.s汇编.s汇编后生成目标文件.o链接.o链接生成可执行文件.exe预处理展开我们所包含的头文件注释删除有宏的地方进行替换,并删除宏不进行语法检查c->i编译将c语言代码翻译成汇编代码进行语法,词法,语义分析符号汇总汇编将汇编代码转换成了二进制指令 o文件此已经成为了二进制文件,但此时还不能运行合并段表符号表的合并和重定位原创 2021-05-21 11:42:53 · 726 阅读 · 0 评论 -
C语言:文件操作
文件:在磁盘或者固态硬盘上的一段已命名的存储区1.从文件功能的角度来分类,文件一般有两种:程序文件、数据文件程序文件源程序文件,目标文件,可执行程序数据文件文件的内容不一定是程序,而是程序运行时读写的数据2.根据数据的组织形式,数据文件被称为 文本文件 或者 二进制文件二进制文件数据在外存上以二进制方式存储文本文件数据在外存上以ASCII码的形式存储我们在文件中,看到10000这个数字是字符1,0,0,0,0的ASCII码值,是文本文件原创 2021-05-19 20:46:27 · 833 阅读 · 0 评论 -
C语言:内存区域&malloc等&free
C/C++程序内存分配的几个区域:1. 栈区(stack): 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储 单元自动被释放。 栈区主要存放:运行函数而分配的局部变量、函数参数、返回数据、返回地址 2. 堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。 3. 数据段(静态区static): 存放全局变量、静态数据。程序结束后由系统释放。 4. 代码段: 存放函数体(原创 2021-05-19 17:09:30 · 685 阅读 · 0 评论 -
C语言:操作符&表达式求值
一.算术操作符:+,-,*,/,%/取整运算符%取余运算符————————————————————————————————————————数学中计算机中5/3=1……2,1是商为整数,2是余数5/3=1,/是取商,为记忆方便称为取整运算符无%除法5%3=2,%是取余数,为方便记忆称为取余运算符二.移位操作符:<<,>>移位分为算术移位和逻辑移位位,代表二进制位,移位时是补码进行移位。在移位时为方便理解与记忆,不用了解原创 2021-04-09 15:53:01 · 623 阅读 · 0 评论 -
C语言:结构体定义与结构体对齐
C语言中结构体的定义是:struct类型 对象{ },这是我们自定义出的一个类型,它并不占任何的存储空间,当定义对象后,系统才会为该对象开辟该结构体大小的空间定义时必须要加struct关键字,c++可以忽略该关键字(1).声明结构体类型(最常见的声明方式)struct test //test是结构体标签{ //里面均是成员变量} s1,s2; //创建的全局变量结构体的特殊声明:(2).不完全声明,匿名结构体类型struct{ } t; //定义结构体t变原创 2021-05-09 21:22:59 · 539 阅读 · 0 评论 -
C语言:字符串函数&内存函数
对字符串操作时,要注意对\0的操作strstr:查找子串,子串不存在返回空指针char * strstr ( const char *, const char * )strtok:从左边第一个不是分隔符的地方开始分割,与分隔符顺序无关(不能修改字符串常量)char * strtok( char * str, const char * sep );strerror:发生错误时,将错误信息用字符串形式以字符串形式打印需要引入该头文件:#include<errno.h>pri...原创 2021-05-18 22:33:31 · 255 阅读 · 0 评论 -
C语言:数组
数组是一组相同类型元素的集合。int arr[ ],[ ]是下标引用操作符,说明定义的变量arr是一个数组类型;数组定义成全局变量,不初始化时,所有元素会自动初始化为0;数组不完全初始化,剩余未初始化的部分自动为0。...原创 2021-05-18 17:04:18 · 285 阅读 · 1 评论 -
C语言:指针 上
在学习指针前,我们应该要先了解两个操作符 *,&*解引用操作符&取地址操作符这两个操作符可以理解成数学中的逆运算操作指针,指针变量int a =1;定义了一个整型变量,a,将1赋给这个变量aint* p =&a;定义了一个整型指针变量,p,将a的地址赋给变量pp是一个整型指针变量,指针变量与指针不同,指针是地址,p中存的是地址,p不能叫指针,严格的说,p是一个指针变量。我们习惯上将其称之为定义了一个指针p。指针,地址(指原创 2021-04-21 10:33:27 · 427 阅读 · 0 评论 -
C语言:字符与字符串
char类型,一个特殊的整型,计算机数据的存储和运算都要用二进制表示,为了将字母和字符也可以用二进制表示,所以将字母和字符与相应的整数进行一一对应,这个对应关系表就称为ASCII码表。char类型也有有符号数和无符号数char一个字节signed charunsigned char...原创 2021-03-30 21:36:34 · 739 阅读 · 0 评论 -
C语言:变量常量
bite-----比特位byte----字节内存中最小的单位是字节,1字节=8比特位c语言基本数据类型原创 2021-03-28 14:05:42 · 1492 阅读 · 0 评论 -
c语言简单介绍&编译过程
C语言是大部分人接触的第一门计算机语言,虽然很多学校将C作为一门初始语言,但是其难度还是有的。计算机只具有一维思想,我们需要通过计算机语言将二维或三维的问题或者现象转化为一维,让计算机执行。这个转化过程就是难度所在。本文只是对c代码进行一个简单的介绍一段C的简单代码#include <stdio.h> //预处理指令 int main ( ) //main函数{ //函数开始标志 printf("Helloword !"); //{}大括号内所有的代码都称为函数体原创 2021-03-24 14:06:25 · 7642 阅读 · 1 评论