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

原创 第十四章 指针(4)
我们可以把调⽤的函数的地址以参数的形式传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。通过该代码我们可以发现代码变得更加简洁的,上一章我们还使用了函数指针数组,大家对比一下代码,看看自己能够更适合那种。我们来举一个的例子来对比两者的区别。我们来回调函数来使代码变得简洁一番。二、qsort 使用举例。一、回调函数是什么?简单来说回调函数就是。
2024-09-09 15:06:12
276

原创 第十五章(指针5)
在我们初学习的时候,有许多同学会把sizeof和strlen函数给混淆,那么本章我们就来详细的探讨一下。strlen函数统计的是字符串\0之前的字符串,遇见\0停止。打印出来的是6其实并不是,是随机值,,需要我们来添加,如果没有添加,就会自动在内存中找,直到遇见\0为止,所以是一个随机值。strlen函数:求字符串的长度的,针对的是字符串(这个就是一个很大的区别),单位是字节,如果操作数是类型的话,我们计算的是类型的大小。3.除此之外的数组名都表示数组的首元素的地址。1.sizeof(数组名),这里的。
2024-09-09 15:04:14
421

原创 第十三章 指针(3)
这个代码我们初学的时候很容易就会理解把“abcdef”的地址存放在地址中,但是实际上只是把首字符(a)的地址放到了pr中,再打印的时候编译器会跟根据首地址来进行访问打印。那么对于二维数组来说,其本质是由一维数组组成的,同理我们可以猜测,二维数组传递的是第一行的一维数组。指针的类型有很多类型,我们常见的是int * ,那么接下来我们来介绍另一种,char *类型的指针。这里我们来回忆一下,我们在介绍一维数组传参的本质的时候证明了传的是数组首元素的地址。我们原来在写函数对数组传参的时候,形参也可以用数组接收。
2024-09-04 23:47:34
799

原创 第十二章 指针(2)
上边的代码就算遇见顺序的数据也会正常执行浪费时间,我们来改造一下,当我们遇见一个顺序的时候,如果在进行这样的判断不就会浪费时间了。这里我们发现sizeof(数组名),计算的是整个数组的大小单位是字节,这里的数组是int且是整形所以就是40。接下来我们来引入一个问题,我们之前都是在函数外部来计算元素个数的,那么我们可以把数组传递给函数,指针变量也是变量,是变量就有地址,那么指针变量的地址存放在那么呢?(整个地址的数组和数组首元素的地址有区别的),其本质数组的传参传递的就是首元素的地址。
2024-08-31 21:40:49
911

原创 既相逢,却匆匆(第11章指针)
在指针类型中有一种的类型是 void * 类型的,可以理解无具体类型的指针(可以理解位垃圾桶),就是可以接收任意类型的指针,但是有利就有弊,void *类型不可以进行指针的+ -整数和解引用的运算。指针-指针得到是字符的长度,我们此时可以想到,strlen也是得到字符的长度的,那么我们是否可以通过次运算来写出自己的strlen函数呢?既然每个指针变量的大小在相同平台下的大小都是相同的,那么为什么还要区分呢?野指针:顾名思义就是指向的方向是不明的(随机,无限制的,错误的),理解成为野狗(流浪的,可恶的)。
2024-08-25 15:46:29
1806

原创 无可奈何花落去,似曾相识燕归来(第五章数组)
而在c99之后引入了变长数组,此时我们就可以创建变量来命名,根据我们所需要的大小来创建变量这样就使其更加灵活。从名字上我们可以看出这是一个数的集合,在我们平常的时候 ,储存数据只能用变量并且只能储存一个数字,那如果我们想要初存多个变量呢?在我们要想知道数组元素的个数,如果储存的元素过多我们不可能一个一个的来数。我们在一维数组中通过数组的下标来访问元素,那么我们在二维数组也可以通过下标来访问二维数组的元素。这样我们就可以在使用数组元素的时候就不用写的那么死板了,不管数组怎么变换我们都。
2024-08-22 22:32:17
660

原创 莫愁前路无知己(第三章)
C语⾔⽤于⽐较的表达式,称为“关系表达式”(relationalexpression),⾥⾯使⽤的运算符就称为“关系运算符”(relationaloperator),主要有下⾯6个。, 与赋值运算符=,是两个不⼀样的运算符,不要混淆。此外逻辑运算符还有需要注意一个问题,C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是。在我们日常解决问题的时候我们可以发现,不管什么事情的解决都是需要逻辑的,一般来说我们只需要三种形式就可以完美的解决其中的问题。
2024-08-18 21:10:20
1096

原创 猜数字得爱心code(小黑子版 (第四章))
今天 我们对代码不解释太多,只粗略的过一下。在学完循环和分支语句之后我会为大家逐个解释的。接下来我们先提前学习一个代码 不会的同学可以直接复制。(因为今天是情人节我就提前出了)
2024-08-10 23:18:52
397

原创 落花时节又逢君(再见c语言)(第二章)
它的第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符(与译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果只想输出开头的部分,可以⽤%.[m]s 指定输出的长度,其中[m] 代表⼀个数字,表⽰所要输出的⻓度。每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。在C99中也引⼊了布尔类型,是专⻔表⽰真假的。
2024-08-10 20:44:46
854
2

原创 与君初相识,犹如故人归(相遇c语言)(第一章)
接下来 让我们一起走进编程的入门一.中文是我们与人交流的方式(各种语言都是用来满足我们之间的交流),那么人与计算机的交流方式是什么呢?不错!正是**计算机语言** 而C语言就是其中的一种⽬前已知已经有上千种计算机语⾔,⼈们是通过计算机语⾔写的程序,给计算机下达指令,让计算机进行工作的初次之外 ***c++,java,python***等~~~都是计算机语言1.1接下来我们来打开c语言的的世界吧来看这个代码int main()return 0;二关于main函数。
2024-08-07 12:33:58
1068
1
原创 数据结构(第三章)顺序表和链表
描述:线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以。的储存单元依次储存数据元素的线性结构,一般情况下采用数组储存,在数组上完成数据的增删查改。实际中链表的结构非常多样,以下情况组合起来就有8中情况。常见的线性表:顺序表,链表,栈 , 队列、字符串等。线性表是一种在实际中应用广泛的数据结构。二.动态顺序表:使用动态开辟的数组储存。、非顺序的储存结构,数据元素的。进行组合我们就可以得到8种情况。1.无头单向费循环链表。2.带头双向循环链表。
2024-11-19 17:15:08
523
1
原创 第十八章(数据在内存中的储存)
前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还。对于64位的浮点数,最高的1位储存符号位 S ,接着11位储存指数E,剩下的52位储存有效数字M。对于32位的浮点数,最高的1位储存符号位 S ,接着8位储存指数E,剩下的32位储存有效数字M。
2024-10-04 12:53:03
1724
原创 第二十章(自定义类型,联合和枚举)
概念:像结构体一样,联合体也是由一个或者多个成员组成的,这些成员也可以是不同的类型。这里我们发现,在c语言中我们可以拿整数给枚举变量赋值,但是在c++中这是不行的。2.与define定义的标识符相比较,枚举类型更容易检查,更加严谨。枚举类型我们从表面的意思就可以很好的了解,是一一例举出来的意思。1.2 联合体的特点:因为联合体是共用一块空间的,所以。接下来我们就来画图解释。{ }的内容都是枚举类型的可能取值,我们称之为。我们能够看出来的是,联合体会很好的节约空间。在声明枚举类型的时候我们是可以给其赋值的。
2024-10-03 21:09:59
573
原创 第二十一章 (动态内存管理)
1、栈区:在执行函数的时候,函数内的局部变量的储存单元都可以在栈上创建,函数执行结束的时候这些储存单元自动被释放。当是情况2 的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩的连续空间来使⽤。c 语言还提供了另一个函数free,是专门用来做动态内存的释放和回收的(一般是要与malloc函数同时使用的),函数原型如下。3.返回类型的是void * ,所以malloc函数并不知道开辟空间的类型,具体在使用者使用的时候自己来选择。2. 数组在申明的时候,必须指定数组的长度,
2024-10-03 16:55:58
1901
原创 第十九章(自定义类型:结构体)
这里我们需要注意的是,我们在使用结构体的时候,尽量要给结构体变量命名。我们通过上边的学习已经初步掌握了结构体的基本使用了。现在我们深入讨论一个问题:计算结构体的大小。结论:在我们传参的时候,要传结构体的地址。三、这里我们在原来的知识中已经介绍过了。1.2 结构体变量的初始化。我们首先需要知道对齐规则。一、结构体类型的声明。我们来举例子练习一下。
2024-10-01 13:00:45
339
原创 第十七章:c语言内存函数
这个函数在遇到‘\0’的时候不会停下来(该函数不检查源中是否有任何终止null字符——它总是精确地复制num个字节。函数memcpy从source的位置向后复制num个字节的数据到destination指向的内存位置。3.如果source和destination有任何的重叠,复制的结果都是未定义的。memset 函数是用来设置函数的,将内存储存的值以字节为单位设置成想要的内容。1.和memcpy 的差别就是memmove函数允许目标内存块的重叠。一、memcpy的使用和模拟实现。二、memmove使用。
2024-09-29 20:21:33
707
原创 第十六章(字符和字符串函数)
返回指向str1中str2第一次出现的指针,如果str2不是str1的一部分,则返回空指针。在编程的过程中,我们往往会遇见字符和字符串,为了方便我C语言就给我们提供了一系列的函数给我们使用。三、 strlen的使用和模拟实现。五、strcat 的使用和模拟实现。六、strcmp 函数的使用和实现。这个与strcpy 有什么不同呢?四、strcpy函数的使用和模拟。十、strstr的使用和模拟实现。七、strncpy 函数的使用。九、strncmp的函数的使用。strcat函数的模拟实现。
2024-09-24 18:22:32
646
原创 第十章(操作符)
也给我们提供了对应的数组。但是这些类型往往都是单一的,如果我们想描述一本书,一个学生,只有这些单一的类型是不够的。操作符的优先级不同决定了数值的不同,我们肯定知道的是 / * 的优先级是大于 + -的。这里我们发现,在不同的编译器上的结果是不同的,说明编译器遇见这种复杂的代码也出现了问题。8进制的数字的每一位都是0~7,0到7的数字各自写成2进制,最多3个二进制数就够了。结构体也是有指针的,那么如果我们拿到的是结构体的指针是如何使用的呢?这里我们主要了解的是操作符,在以后的学习中我们更详细的了解一下。
2024-09-12 17:53:13
865
原创 曾是惊鸿照影来 (第六章函数)
那么函数也一样的,我们创建一个函数通过形式参数接收数据(原材料),然后通过函数体实现(加工),得到返回数据(产品)。我们在调用函数的时候已经创建了a,b变量(已经有地址了),我们在调用的时候传递了a,b称为实际参数,简称实参。一般情况下我们会把函数的声明,类型的声明放在头文件中(.h)函数的实现是放在源文件(.c)文件中。在我们使用函数的时候难免会遇见数组做函数的参数,那么当数组做函数的时候我们如何传参的呢?这里我们发现,x和y确实接收了a,b的值,但是它们的地址是不一样的,所以我们可以理解为。
2024-09-10 17:40:01
700
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人