![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 88
bit..
在校学生,偶尔写写博客,提高自我,希望对你我有所帮助
展开
-
C语言——程序环境和预处理(下)
_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。语法:#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现case //在写case语句的时候自动把 break写上。原创 2022-10-10 14:37:00 · 442 阅读 · 0 评论 -
C语言——程序环境和预处理(上)
程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程 一直保留他们的值。在独立的环境中,程序 的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。1. 预处理 选项 gcc -E test.c -o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。2. 编译 选项 gcc -S test.c 编译完成之后就停下来,结果保存在test.s中。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。2. 程序的执行便开始。原创 2022-10-10 14:12:06 · 218 阅读 · 0 评论 -
C语言——文件操作(下)
ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“文件缓冲区”。如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而 二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。这里可以得出一个结论: 因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文 件。原创 2022-10-10 11:31:48 · 180 阅读 · 0 评论 -
C语言——文件操作(中)
根据文件指针的位置和偏移量来定位文件指针。返回文件指针相对于起始位置的偏移量。让文件指针的位置回到文件的起始位置。原创 2022-10-10 11:20:10 · 353 阅读 · 0 评论 -
C语言——文件操作(上)
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2022-10-10 10:52:04 · 151 阅读 · 0 评论 -
C语言——动态内存管理(下)
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给 用户。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好 了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。4. 代码段:存放函数体(类成员函数和全局函数)的二进制代码。但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序结束才销毁所以生命周期变长。原创 2022-10-10 10:10:41 · 145 阅读 · 0 评论 -
C语言——动态内存管理(中)
切记: 动态开辟的空间一定要释放,并且正确释放。忘记释放不再使用的动态开辟的空间会造成内存泄漏。请问运行Test 函数会有什么样的结果?请问运行Test 函数会有什么样的结果?请问运行Test 函数会有什么样的结果?请问运行Test 函数会有什么样的结果?原创 2022-10-10 09:59:42 · 150 阅读 · 0 评论 -
C语言——动态内存管理(上)
情况2 当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小 的连续空间来使用。有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。原创 2022-10-09 20:32:57 · 378 阅读 · 1 评论 -
C语言——自定义类型:结构体,枚举,联合(下)
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。int _b:5;int _c:10;int _d:30;};A就是一个位段类型。那位段A的大小是多少?enum Day//星期{Mon,Tues,Wed,Thur,Fri,Sat,Sun};enum Sex//性别{MALE,FEMALE,SECRET};原创 2022-10-09 19:49:35 · 199 阅读 · 0 评论 -
C语言——自定义类型:结构体,枚举,联合(上)
有了结构体类型,那如何定义变量,其实很简单{int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明{//名字int age;//年龄};//初始化{int data;//结构体嵌套初始化//结构体嵌套初始化。原创 2022-10-09 19:05:49 · 432 阅读 · 1 评论 -
C语言——字符函数和字符串函数(下)
注:让他们下去自己研究一下KMP算法。原创 2022-10-09 14:36:02 · 167 阅读 · 1 评论 -
C语言——字符函数和字符串函数(上)
字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是无符号的( 易错 )学会strlen函数的模拟实现int main(){{}else{}return 0;}原创 2022-10-09 13:48:51 · 175 阅读 · 0 评论 -
C语言——指针的进阶(下)
如果你把函数的指针(地址)作为参数传递给另一个 函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数 的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进 行响应。1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。注意:这里第一次使用 void* 的指针,讲解 void* 的作用。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。指针指向一个 数组 ,数组的元素都是 函数指针;原创 2022-10-08 21:44:46 · 581 阅读 · 0 评论 -
C语言——指针的进阶(中)
在写代码的时候难免要把【数组】或者【指针】传给函数,那函数的参数该如何设计呢?、原创 2022-10-08 20:19:50 · 180 阅读 · 2 评论 -
C语言——指针的进阶(上)
数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。下面代码哪个是数组指针?//p1, p2分别是什么?解释://解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个 指针,指向一个数组,叫数组指针。//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。原创 2022-10-08 16:02:10 · 517 阅读 · 0 评论 -
C语言——深度剖析数据在内存中的存储(下)
但是,我们 知道,科学计数法中的E是可以出 现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数 是127;那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3+127=130, 即10000010。对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。好了,关于浮点数的表示规则,就说到这里。对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字V。原创 2022-10-08 15:01:34 · 197 阅读 · 0 评论 -
C语言——深度剖析数据在内存中的存储(上)
前面我们已经学习了基本的内置类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型?以及他们所占存储空间的大小。类型的意义:1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看待内存空间的视角。原创 2022-10-08 14:41:22 · 195 阅读 · 0 评论 -
C语言——结构体
有了结构体类型,那如何定义变量,其实很简单。{int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明{//名字int age;//年龄};//初始化{int data;//结构体嵌套初始化//结构体嵌套初始化。原创 2022-10-06 13:57:29 · 188 阅读 · 2 评论 -
C语言——指针
指针是什么?指针理解的2个要点:1. 指针是内存中一个最小单元的编号,也就是地址2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量。那我们就可以这样理解:内存指针变量我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个 变量就是指针变量总结:指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是: 一个小的单元到底是多大?(1个字节) 如何编址?原创 2022-10-05 14:20:08 · 208 阅读 · 4 评论 -
C语言——操作符详解(上)
逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置--++ 前置、后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换int main(){2);0);a = -a;p = &a;//这样写行不行?//这样写行不行?原创 2022-10-04 18:04:51 · 181 阅读 · 3 评论 -
C语言——数组
当数组传参的时候,实际上只是把数组的首元素的地址传递过去了。C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的, 所以程序员写代码时,最好自己做越界的检查。数组在创建的时候如果想不指定数组的确定的大小就得初始化。所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。原创 2022-10-04 09:18:07 · 196 阅读 · 2 评论 -
C语言——函数(下)
1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数 声明决定不了。2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。3. 函数的声明一般要放在头文件中的。函数的定义是指函数的具体实现,交待函数的功能实现。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接 调用自身的。原创 2022-10-03 10:07:37 · 312 阅读 · 1 评论 -
C语言——函数(上)
如果库函数能干所有的事情,那还要程序员干什么?所有更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。{statement;//语句项}ret_type 返回类型fun_name 函数名para1 函数参数我们举一个例子: 写一个函数可以找出两个整数中的最大值。//get_max函数的设计{(x):(y);}原创 2022-10-03 08:36:28 · 604 阅读 · 2 评论 -
C语言——循环语句(while for do while)
/while 语法结构while(表达式)循环语句;while循环流程图比如我们实现: 在屏幕上打印1-10的数字。原创 2022-10-01 18:47:03 · 261 阅读 · 2 评论 -
C语言——分支语句(if和switch语句)
C语句可分为以下五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句本周后面介绍的是控制语句。控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。可分成以下三类:1. 条件判断语句也叫分支语句:if语句、switch语句;2. 循环执行语句:do while语句、while语句、for语句;3. 转向语句:break语句、goto语句、continue语句、return语句。原创 2022-10-01 14:37:14 · 531 阅读 · 0 评论 -
初始C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产 生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的 C语言程序可在许多电脑平台上进 行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。原创 2022-09-29 15:44:57 · 184 阅读 · 0 评论