![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言学习
文章平均质量分 62
幻千寒
这个作者很懒,什么都没留下…
展开
-
运算符优先级小示例
等号的结合性是从右向左,即先算nums[sest++]部分即将num[sest]赋值给左边。左侧nums[src]的值被修改成nums[sest],此刻sest++.这条语句结束后src++;这个该先算哪一个呢?原创 2023-08-08 12:55:18 · 15 阅读 · 0 评论 -
文件操作以及缓冲区
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,字,文件状态及文件当前的位置等)。因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名。feof 的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。原创 2023-07-27 16:31:11 · 162 阅读 · 0 评论 -
动态内存(二)
包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大。用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你。1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结。如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好。了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。原创 2023-07-27 02:26:59 · 62 阅读 · 0 评论 -
动态内存陷阱
这一点很重要,传值调用,是将变量的值传递,传址调用是将将变量的地址传递。并不是址传递而GetMemory函数,形参接收变量会开辟新的空间并将开辟的空间放到p中。在GetMemory函数返回p的地址的时候函数结束,p的地址被释放,str接收了p释放地址的空间,再访问的时候就非法访问,属于野指针。这里面还有一个问题GetMemory开辟的空间无法回收,malloc开辟之后函数销毁,也没有变量记录空间首地址,会导致内存无法释放。在函数GetMemory函数使用的时候传递str指针的时候传递的究竟是什么!原创 2023-07-27 01:05:33 · 63 阅读 · 0 评论 -
动态内存管理
对于上面的代码1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。我们在创建变量开辟空间的时候很多时候,开辟的空间是固定的,不够灵活,多了又浪费少了又不够,那么有没有什么办法能够灵活的开辟空间,避免这个情况呢?动态内存管理。原创 2023-07-26 01:09:10 · 45 阅读 · 0 评论 -
自定义类型——结构体、枚举、联合
结构体变量的定义int main()int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化return 0;原创 2023-07-24 23:43:41 · 30 阅读 · 0 评论 -
错误码函数
库函数在执行的时候发生了错位,会将一个错误码放在,erron这个变量中,erron是C语言提供的一个库函数,而这个函数,则可以将错误吗,翻译成对应的信息。返回错误码对应的字符串可以打印出来。使用的时候strerror(error)可以在里面添加自定义信息,直接打印。使用:perror(自定义信息)原创 2023-07-24 21:14:23 · 34 阅读 · 0 评论 -
C语言指针进阶(一)
在内存中会划分一个个的内存单元,每个单元存在独立的内存编号,这个编号也叫地址。地址在C语言中被称为指针。指针需要存储起来——存储到变量中。这个变量就被称为指针变量。指针的固定大小固定是4/8个大小。指针的类型决定了指针加减整数的步长以及解引用时候的权限。原创 2023-07-23 00:04:03 · 39 阅读 · 0 评论 -
C语言字符函数的输入特殊用法——清空字符缓冲区
清空字符缓冲区,当我们在使用scanf函数输入字符的时候,在确认的时候,会按下回车键,但是如果再次输入的时候,因为回车在字符缓冲区,打印的时候会优先读取字符缓冲区的字符,而不是本次输入的字符,因此打印出来的是回车符。在输入第一个之后我们按了回车,也就意味着我们输入了2【回车】我们打印了2,【回车】留在了字符缓冲区,下一个scanf在输入的时候直接优先从字符缓冲区里读取了【回车】进行了打印。在第一次打印后,使用getchar函数将字符缓冲区的多余字符读取出来,清空字符缓冲区。原创 2023-06-06 00:06:52 · 537 阅读 · 0 评论 -
数据在内存中的存储(二)——浮点数
前言上一篇,我们探讨了整形在数据中的存储,但是除了整形还有浮点数的存在。那么浮点数在内存中是怎么存储的呢?浮点数存储打印示例这一段代码,大家可以猜一下运行结果是什么?我想大部分人的答案应该是9 9.0 9 9.0这样的结果但是答案却不是这样。这才是他的运行结果。那么为什么会有这样的结果呢?原创 2023-06-01 16:54:52 · 36 阅读 · 0 评论 -
C语言——代码调试篇
每一个编程的大佬都是一步一步通过经验的积累,才成为大佬,达到别人无法企及的高度。每一个人都是从编程的新手逐渐走过来的。那么作为一个新手总是不可避免的,回写出有问题含有bug的代码,那么就需要学会调适,发现问题,并解决问题。原创 2023-05-28 12:23:43 · 366 阅读 · 0 评论 -
数据在内存中的存储(一)
类型 所占字节数char 1 字符存储的时候存储的是ASCII码值,所以也归为整形里面。long 4/8 (long理论上sizeof(long)>=sizeof(int),在大小上没有明确规定,取决于实现环境)原创 2023-05-27 23:41:53 · 38 阅读 · 0 评论 -
C语言小游戏(一)——三子棋小游戏
实现界面效果如下:使用C语言来实现这个效果,可以电脑自动下棋,玩家选定下棋,判断输赢。原创 2023-05-09 09:45:45 · 36 阅读 · 0 评论 -
C语言数组篇(一)
在C99之后可以使用变量来定义字符串长度,但是不可以初始化。数组通过下标来访问。通过访问符【】来访问。二位数组初始化,与以为数组类似,不过多了行下表。在内存种的存储也是连续存在的。C语言创建的时候不能用变量才定义数组长度如int arr[i];int arr[10]="ararrar" //以数组形式创建。数组在内存中的使用——数组在内存种连续存放。int arr4[]={1,2,3}//由数组来确定长度。在初始化的时候列行下表可以省略,但是列下标不可以省略。数组的初始化数组的初始化有多种方法。原创 2023-05-06 22:56:54 · 24 阅读 · 0 评论 -
C语言算法篇——冒泡排序
先对第一个数进行排序。9和8比,比8大交换。按照这样的原理,把他交换到最大的后面没有比他的数之后,不再交换。所有的全部排好序需要的趟数,是总数组元素个数减一,因为当他前面的个数都排序好之后,剩下的那个默认已经是最小的了。第一躺排序号之后就只有,因为最后一个已经排好了。多余需要和总个数-1-已经拍好的个数来比较。冒泡排序的算法,对一组数字,进行排序从小到大,排序。如arr 9 8 7 6 5 4 3 2 1。原创 2023-05-06 22:11:44 · 34 阅读 · 0 评论 -
C语言——函数篇(一)
有封装好功能的库函数那么就有自己实现的自定义函数,自定义函数由程序员的功能由程序员自定义来实现。为什么会出现库函数呢?功能由各种各样的,无数个,不可能封装所有的功能成为库函数,也不可能所有的封装都是最适合程序的,称心如意。所以有了自定义函数。自定义函数和库函数一样,由函数名,返回值,函数参数,函数体。但不同的是这些都由我们自己来设计,这些都由我们自己来实现这就是最简单的一个自定义函数,实现输入两个数相加。函数如果函数名前没有类型那么默认按int类型来算。原创 2023-04-23 16:35:05 · 61 阅读 · 1 评论 -
关于计算机的未来企划
熟练掌握计算机技术,可以写出自己喜欢的软件,市面上好多软件虽然有但是很残缺,就总是不尽如人意,我就想自己可以开发自己喜欢的软件来完成自己喜欢的工作。原创 2023-04-06 15:44:53 · 30 阅读 · 0 评论