![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 72
C语言从零开始
嶔某
再上坡!
展开
-
C语言指针从基础到进阶
还记得上一篇博客出现了这么一段关于用指针访问数组的代码。这里用&arr[0]拿到了数组首元素的地址,但其实数组名在大部分情况下本来就是首元素的地址关于详细情况可以在我的另一篇博客了解:C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。-CSDN博客但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。原创 2024-03-10 23:56:12 · 967 阅读 · 1 评论 -
数据结构_非常方便的链表
链表是线性表的一种,是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。和顺序表差不多,用结构体定义一个节点,包括存储的数据和下一个节点的地址。这里我们写几个接口:尾插,头插,尾删,头删,查找元素,指定位置插入,指定位置删除,销毁。原创 2024-04-09 22:22:44 · 445 阅读 · 1 评论 -
C语言中动态内存相关的4个函数free、malloc、calloc、realloc,常⻅的动态内存的错误
有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的分配内存,我们⼀定会对内存的⼤⼩做灵活的调整。如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器(在VS2022上malloc会象征性的给你一个地址,当你访问这个地址的时候就会造成越界访问)这时编译器会在内存的另一块空间开辟size大小的地址,并将原空间的数据拷贝到新空间,返回新空间的起始地址。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。size 调整之后新⼤⼩。原创 2024-03-23 00:45:06 · 680 阅读 · 0 评论 -
数据结构_带头双向循环链表
相较于之前的顺序表和单向链表,双向链表的逻辑结构稍微复杂一些,但是在实现各种接口的时候是很简单的。因为不用找尾,写起来会舒服一点。(也可能是因为最近一直在写这个的原因)原创 2024-04-13 23:30:14 · 313 阅读 · 2 评论 -
数据结构_基于链表的通讯录
顺序表的源代码需要略作修改,如下 将数据类型改为通讯录的结构体。注释掉打印,查找的函数。原创 2024-04-12 23:49:20 · 310 阅读 · 2 评论 -
C语言指针从进阶到精通
字符指针变量这里的两段代码很多人以为是吧字符串hello world放在了cp里面,但是事实是将字符串首字母的地址放在cp里面。这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。原创 2024-03-23 23:12:11 · 871 阅读 · 0 评论 -
C语言结课实战项目_贪吃蛇小游戏
游戏状态:方便判断蛇的状态:(1)正常(2)撞墙(3)撞到自己(4)正常退出每一次while循环后判断游戏状态。食物指针:从开发角度来说,其实食物也是蛇的一个节点,当蛇头的下一个位置为食物时,将食物的节点头插到蛇身上面。反之变长,食物权重减少。遍历蛇身链表,若坐标重合,将蛇的状态改为KILL_BY_SELF,并且跳出循环。创建下一位置的节点,也是头插,但是在打印蛇身之后,将蛇尾位置打印两个空格。先将新节点头插进蛇身,打印蛇身在屏幕上,总分数加上食物权重。(这里也是有范围的,食物权重不能为负数,也不能过大)原创 2024-04-19 12:31:42 · 1715 阅读 · 28 评论 -
数据结构_基于顺序表的通讯录
在顺序表的基础上,新定义一个(personinfo)结构体,将这个结构体作为顺序表的数据类型,存储在顺序表中。通过顺序表的基本接口实现personinfo的增删查改。原创 2024-04-08 14:46:14 · 259 阅读 · 0 评论 -
C语言中的文件和文件操作
函数名功能适⽤于fgetc字符输⼊函数所有输⼊流fputc字符输出函数所有输出流fgets⽂本⾏输⼊函数所有输⼊流fputs⽂本⾏输出函数所有输出流fscanf格式化输⼊函数所有输⼊流fprintf格式化输出函数所有输出流fread⼆进制输⼊⽂件fwrite⼆进制输出⽂件上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如⽂件输出流)。原创 2024-03-30 00:41:36 · 838 阅读 · 0 评论 -
C语言字符函数strncpy,strncat,strstr,strtok,strerror内存函数memcpy,memove,memset,memcmp详解||模拟实现
⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节(和strcmp差不多,memcmp可以比较任何内容)。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。原创 2024-03-15 22:24:23 · 460 阅读 · 0 评论 -
数据结构_时间复杂度(Time complexity)
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。原创 2024-04-21 19:30:25 · 955 阅读 · 13 评论 -
有关整数和浮点数在内存中存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。原创 2024-03-17 15:27:30 · 816 阅读 · 0 评论 -
C语言结构体类型,结构体变量的创建和初始化,结构中存在的内存对齐
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字struct Aint _a : 2;int _b : 5;int main()//输出 8。原创 2024-03-19 23:22:47 · 854 阅读 · 0 评论 -
C语言程序编译和链接
在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。原创 2024-03-30 16:44:45 · 921 阅读 · 0 评论 -
详解C语言中:sizeof和strlen的区别
首先我要在此声明sizeof不是函数!不是函数!不是函数!而是一个操作符!(看到operator了吗?)原创 2024-03-03 21:12:20 · 347 阅读 · 0 评论 -
C语言(扫雷游戏)
经过对C语言一段时间的学习我们可以自己进行一些小项目的编写。在扫雷游戏中,我们用了模块化设计,将不同的模块放进不同的文件里面分成head.h head.c test.c 三个部分整个代码最让我感到头疼的是find_mine函数的实现,里面有多个if else语句,并且此函数里面还有其他函数find_mine_count的调用,find_mine_count函数还有一种实现方法是将mine[x][y]周围的八个元素相加减去8*'0',返回结果。原创 2023-12-28 22:48:28 · 474 阅读 · 4 评论 -
C语言学习第一课
对于此问题我的解决办法是关掉电脑自带的杀毒软件,因为杀毒软件会把.exe文件看作病毒删除。我下载完vs2022新建项目退出后,再进去遇到了这个问题。原创 2023-11-23 16:24:10 · 379 阅读 · 0 评论 -
详解C语言库函数:qsort()
第三段代码则是把我们熟悉的冒泡排序进行了模拟实现qsort,如果你想要对qsort的理解更加深刻或许你可以删掉此代码然后自己写一遍,这会使你的编程思维得到提升,并且会让你对qsort的实现有一个更加全面的认识。是一个函数指针,指向一个有两个参数返回类型为int的函数,我们可以在这个函数里面规定这些数据应该如何排序,如果。(学习的重点应该放在思维的训练上,而不是单纯的这个函数应该如何使用)如果第一个参数小于第二个参数,则返回负整数值,如果第一个参数。于第二个参数,则返回正整数值,如果参数等效,则返回零。原创 2024-03-02 21:51:09 · 348 阅读 · 0 评论 -
基于C语言写的计算器
此计算器可以一次性的计算 加 减 乘 除 按位左移 按位右移 按位与 按位或 按位异或 等计算。原创 2024-02-06 22:43:46 · 470 阅读 · 1 评论 -
基于C语言写的计算器(2)
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的。原创 2024-02-07 20:28:26 · 525 阅读 · 1 评论 -
数据结构_顺序表基本操作代码
顺序表是用一段物理地址连续的存储单元依次存储数据元素的结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表的本质就是,动态增长,并且要求里面存储的数据必须是从左往右的。它分为静态顺序表(容量不可修改)和动态顺序表(可修改容量,可任意增删查改数据)原创 2024-03-06 17:47:02 · 638 阅读 · 1 评论 -
C语言(循环)
如果表达式2为假(==0)则循环结束,如果表达式2为真(==1) 就执行下面的语句,执行完后,再执行表达式3(调整循环变量)之后判断表达式2的真假决定是否再进行下一次循环。就是说如果if后面的表达式为真那么就会执行后面的语句,while后面的表达式为真的话也会执行语句,当执行完语句后会返回再一次判断表达式的真假。它们的区别是while语句是可以进行循环的操作的。2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤ 循环解决。那么还是打印数字1~10。原创 2023-12-09 21:46:51 · 1052 阅读 · 2 评论 -
变态面试题(C语言中实现两个整数的交换)
C语言中在不创建临时变量的情况下,实现两个整数的交换。原创 2024-01-25 13:55:00 · 416 阅读 · 0 评论 -
C语言指针部分易错
关于assert宏,它是一个断言,在写代码的过程中,如果要使用assert,就要包括头文件。否则就终止程序,这在代码的调试中很常用,我们通过定义NDEBUG宏来进行assert的禁用。sizeof(i)的值为4,而i为-1,此时如果以为选择B就万事大吉了的话,那也太小看此题了。B:int (*ptr)[10]这是一个数组指针,代码的意思是将整个的数组地址(&arr)放进这个数组指针里面,没有问题。D:前面说了&arr表示整个数组的地址,把整个数组的地址放进一个指针里面是不可行的。原创 2024-02-22 16:47:39 · 882 阅读 · 1 评论 -
C语言指针从入门到基础详解(非常详细)
我们知道电脑中的CPU在处理数据的时候需要在内存中读取数据处理后的数据也会放在内存中。把内存划分为一个个的内存单元每个单元的大小是一个字节。每个字节都有它对应的编号也就是它的地址,以便CPU可以快速的找到一个内存空间。C语言中我们把地址叫做指针,所以。原创 2024-03-09 18:23:28 · 1025 阅读 · 1 评论 -
模拟实现C语言库函数(strlen,strcpy,strcat)
三种方法。原创 2024-03-09 18:03:26 · 431 阅读 · 1 评论 -
C语言(分支)
switch语句根据expression中的值找到相对应的case并执行(break跳出),如果找不到,那么就执行default(然后跳出)如果输入1~5则输出 '上学',输入6,7输出 '放假'。如果输入的数字不是在1~7那么输出 '输入错误'。在switch中我们通常将case放在中间,将defautl放在开头或结尾。注意:if else语句后面默认都是只跟一条语句,如果有多条语句执行可以用"{}"将它们扩起来。此处注意"="和 "=="的区别。else后面的语句是当if的判断语句为假时执行。原创 2023-12-06 15:45:21 · 544 阅读 · 1 评论 -
C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。
但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表示整个数组,计算的是整个数组的⼤⼩,除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。原创 2024-03-10 23:22:16 · 406 阅读 · 1 评论 -
C语言(逻辑操作符)
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为。原创 2023-12-16 23:47:10 · 524 阅读 · 0 评论