- 博客(52)
- 收藏
- 关注

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(5)
回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条 件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。第13讲中我们写的计算机的实现的代码中,红⾊框中的代码是重复出现的,其中虽然执⾏计算的逻辑 是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?
2025-02-25 18:47:44
1137
2

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(4)
所以,根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀ 维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类 型就是数组指针类型 int(*)[5]。⾸先我们再次理解⼀下⼆维数组,⼆维数组其实可以看做是每个元素是⼀维数组的数组,也就是⼆维 数组的每个元素是⼀个⼀维数组。根据前⾯学习整型指针,数组指针的时候,我们的类⽐关系,我们不难得出结论: 函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。
2025-02-25 18:00:02
872

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(3)
同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移 量求出元素的地址,然后解引⽤来访问的。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且 是数组⾸元素的地址,我们来做个测试。数组名如果是数组⾸元素的地址,那下⾯的代码怎么理解呢?
2025-02-24 19:10:13
1061

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(2)
Swap1函数在使⽤ 的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫传值调⽤。上述代码中n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我们在代码中对n就⾏修改,就不符合语法规则,就报错,致使没法直接修改n。如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址会报错。这就是const的作⽤。
2025-02-23 15:53:58
556

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(1)
我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的 数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后 是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4 个字节才能存储。在上⾯的代码中,将⼀个int类型的变量的地址赋值给⼀个char*类型的指针变量。
2025-02-05 22:16:29
956

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——操作符详解
/代码1:变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//代码2:初始化。struct Stu //类型声明//名字int age;//年龄//初始化//指定顺序初始化//代码3int data;//结构体嵌套初始化//结构体嵌套初始化即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的 计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别复杂的表达式。
2025-02-02 16:40:48
1522
1

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——函数递归
1231.什么是递归递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终也会陷⼊死递归,导致栈溢出(Stack overflow)。1.1递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。
2025-01-30 23:13:50
1287
3

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——函数
了解了库函数,我们的关注度应该聚焦在⾃定义函数上,⾃定义函数其实更加重要,也能给程序员写 代码更多的创造性。⼀般我们在使⽤函数的时候,直接将函数写出来就使⽤了。⽐如:我们要写⼀个函数判断⼀年是否是闰年。//判断⼀年是不是闰年return 1;if(r == 1)printf("闰年\n");elseprintf("⾮闰年\n");return 0;if(r == 1)
2025-01-27 13:26:14
1272

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——数组
数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。• 数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。
2025-01-24 15:00:45
920

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——分支和循环(下)
掌握了前⾯学习的这些知识,我们就可以写⼀些稍微有趣的代码了,⽐如: 写⼀个猜数字游戏 游戏要求:1. 电脑⾃动⽣成1~100的随机数2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束注:大家可以自行提高游戏难度。
2025-01-21 20:07:45
1106

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——分⽀和循环(上)
C语⾔是的程序设计语⾔,这⾥的结构指的是,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if、switch实现分⽀结构,使⽤for、while、dowhile实现循环结构。
2025-01-20 15:10:07
1454

原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——C语言基础概念
C语言的一些最最最基础的概念,让大家对C语言有一个简简单单的认识,开启大家学习C语言的第一步
2025-01-10 21:35:50
1145
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——字符串函数
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolower 函数。C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。• 参数指向的字符串必须要以 '\0' 结束。
2025-03-29 23:24:15
349
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——编译和链接
在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。
2025-03-09 19:08:10
623
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——动态内存管理
C/C++程序内存分配的⼏个区域:1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内 存容量有限。栈区主要存放运⾏函数⽽分配的局部变量、函数参数、返回数据、返回地址等。《函数栈帧的创建和销毁》2. 堆区(heap):⼀般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统) 回收。分配⽅式类似于链表。
2025-03-07 15:11:33
929
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——⾃定义类型:结构体
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以 选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?
2025-03-02 20:56:38
589
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——内存函数
• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。• 如果source和destination有任何的重叠,复制的结果都是未定义的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。• 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。• 这个函数在遇到 '\0' 的时候并不会停下来。对于重叠的内存,交给memmove来处理。
2025-02-28 23:12:13
135
原创 一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——深⼊理解指针(6)
在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存空间⼤⼩的,单位是字。统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表⽰⾸元素的地址。
2025-02-27 10:21:00
356
原创 踏入编程世界的第一个博客
我,一个双非一本大一新生,普通的不能再普通了,面对宏伟庞大的计算机世界仍显得举手无措,我自以为自身仍有些许骨气,不想普普通通,甚是浑浑噩噩的度过四年大学,经历了高考的打击,双非一本的现实,总让我抬不起头来,可是可是,我还不服输,我还有骨气,我想再去拼一把,我想学习编程,进入学校的实验室,我还想明天春天参加蓝桥杯,我也想在这四年里有机会参加ACM,已经自学编程一个月,可是现实与梦想总是有差距的,鹏哥的网课看了50多节,题目也做了有一些了,可是自己感觉仍还不够,只有这样,怎么能够与211.985的学生们去竞争呢
2025-02-02 18:44:32
697
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人