自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 自定义类型:结构体

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

2023-11-22 20:50:15 92

原创 数据在内存中的存储

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分 为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念: ⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存 在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存 在内存的⾼地址处。2.2 为什么有⼤⼩端?为什么会有⼤⼩端模式之分呢?

2023-11-21 18:08:45 127

原创 C语⾔内存函数

• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。• 这个函数在遇到 '\0' 的时候并不会停下来。• 如果source和destination有任何的重叠,复制的结果都是未定义的。

2023-11-13 23:48:44 628

原创 字符含数和字符串函数

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0.

2023-11-09 22:20:47 50

原创 字符函数和字符串函数

【代码】字符函数和字符串函数。

2023-11-06 23:20:53 38

原创 理解指针——sizeof和strlen的对比

sizeof 计算变量所占内存内存空间⼤⼩的,单位是 字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。3. 关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界。2. srtlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数。strlen 是C语⾔库函数,功能是求字符串⻓度。2. sizeof计算操作数所占内 存的⼤⼩,单位是字节。3. 不关注内存中存放什么数据。1. sizeof是操作符。

2023-10-16 23:01:30 32

原创 理解指针:qsort函数

回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条 件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应。使⽤回调函数,模拟实现qsort(采⽤冒泡的⽅式)。

2023-10-15 22:24:03 29

原创 指针的理解

所以函数是有地址的,函数名就是函数的地址,当然也可以通过 &函数名 的⽅ 式获得函数的地址。如果我们要将函数的地址存放起来,就得创建函数指针变量,函数指针变量的写法其实和数组指针非常类似。parr1 先和 [] 结合,说明 parr1是数组,数组的内容是int (*)() 类型的函数指针。函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。ypedef 是⽤来类型重命名的,可以将复杂的类型,简单化。要把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组。通过函数指针调⽤指针指向的函数。

2023-10-12 22:45:45 28

原创 指针的理解

特别容易让同学以为是把字符串 hello world 放 到字符指针 pstr ⾥了,但是本质是把字符串 hello world. ⾸字符的地址放到了pstr中。p先和*结合,说明p是⼀个指针变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以 p是⼀个指针,指向⼀个数组,叫数组指针。存放浮点型变量的地址,能够指向浮点型数据的指针。整形指针变量: int * pint;存放的是整形变量的地址,能够指向整形数据的指针。那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。

2023-10-12 00:45:43 29

原创 指针的理解

是存放指针的数组就叫做指针数组,数组指针的每个元素都是⽤来存放地址(指针)的,数组指针的每个元素是地址,又可以指向⼀块区域。**ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a。*ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa。指针变量也是变量,是变量就有地址,那指针变量的地址存放在二级指针中。

2023-10-10 23:12:18 22

原创 指针的理解

但是有两个例外: 1. sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节 2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的),除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是 ⾸元素的地址,+1就是跳过⼀个元素。

2023-10-08 22:41:59 26

原创 指针的理解

如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址会报错。比如创建了整形变量a,内存中 申请4个字节,⽤于存放整数10,其中每个字节都有地址,而&a取出的是a所占4个字节中地址较⼩的字节的地址。• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。,它用于暂时存放CPU中的运算数据,以及与硬盘等。

2023-10-02 16:21:36 34

原创 操作符的优先级和结合性

运算符关联性指定了在包含多个具有相同优先级的运算符的表达式中,操作数是与其左侧还是右侧的操作数组合。() 函数调用 L-R 否。-> 访问结构指针成员 L-R 否。<<= 以...左移 R-L 否。>>= 以...右移 R-L 否。+ 单目,表示正值 R-L 否。- 单目,表示负值 R-L 否。%= 以...取模 R-L 否。^= 以...异或 R-L 否。结合性:L-R 或 R-L。+= 以...加 R-L 否。-= 以...减 R-L 否。*= 以...乘 R-L 否。

2023-09-30 14:20:11 76

原创 函数的递归

把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。所以如果不想使⽤递归就得想其他的办法,通常就是迭代的⽅式(通常就是循环的方式)。在递归的过程中会有重复计算,而且递归层次越深,冗余计算就会越多。递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。输⼊⼀个整数m,打印这个按照顺序打印整数的每⼀位。每次递归调⽤之后越来越接近这个限制条件。

2023-09-27 23:44:13 27

原创 监视和内存观察及调试实例

在打开内存窗⼝后,要在地址栏 比特就业课 输⼊:arr,&num,&c,这类地址,就能观察到该地址处的数据。内存布局随着数组下标的增⻓,往后越界就有可能覆盖到i,这样就可能造成死循环的。

2023-09-25 13:02:08 53 1

原创 VS调试技巧

F11:逐语句,就是每次都执⾏⼀条语句,但是这个快捷键可以使我们的执⾏逻辑进⼊函数内部。在函 数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。断点的作⽤是可以在程序的任意位置设置断点,打上断点就可以使得程序执⾏到想要的位置暂定执 ⾏,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执⾏细节。F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调⽤,或者是⼀条语句。F5:启动调试,经常⽤来直接跳到下⼀个断点处,⼀般是 和F9配合使⽤。

2023-09-23 21:04:38 41 1

原创 函数——函数的声明和定义

一个标识符的作用域指在源文件中该标识符能够独立的合法出现的区域,生命周期则是一个程序运行时的概念,它指的是变量在整个程序中载入到结束运行的过程中存在的时间周期。函数和数据类型是静态的概念,所以没有生命周期的说法,它们从编译、程序的运行到结束是一直存在的。⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在原⽂件(.c)⽂件中。先声明后使用,函数的定义也是一种特殊的声明,所以如果函数在调用之前也是可以的。⼀般我们在使⽤函数的时候,直接将函数写出来就使⽤了。

2023-09-22 16:41:57 52

原创 函数——嵌套调用和链式访问

上⾯的例⼦中,我们就第⼀个printf打印的是第⼆个printf的返回值,第⼆个printf打印的是第三个 printf的返回值。第三个printf打印43,在屏幕上打印2个字符,再返回2 第⼆个printf打印2,在屏幕上打印1个字符,再放回1 第⼀个printf打印1 所以屏幕上最终打印:4321。链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数 的链式访问。嵌套调用⽤就是函数之间的互相调⽤,也正是因为函数之间有效的互相调⽤,最后写出来了相对⼤型的程序。

2023-09-21 12:20:40 31

原创 函数——return语句,数组作函数参数

return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式 的结果。如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误。return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。在使⽤函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进⾏操作。⽐如:写⼀个函数对将⼀个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容。return语句执⾏后,函数就彻底返回,后边的代码不再执⾏。

2023-09-20 19:05:21 106 1

原创 函数——自定义函数,形参和实参

ret_type fun_name(形式参数)ret_type 是⽤来表⽰函数计算结果的类型,有时候返回类型可以是 void ,表⽰什么都不返回fun_name 是为了⽅便使⽤函数;就像⼈的名字⼀样,有了名字⽅便称呼,函数有了名字⽅便调 ⽤,所以函数名尽量要根据函数的功能起的有意义。函数的参数就相当于,⼯⼚中送进去的原材料,函数的参数也可以是 void ,明确表⽰函数没有参 数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。{}括起来的部分被称为函数体,函数体就是完成计算的过程。

2023-09-19 12:09:26 295

原创 函数——函数概念及库函数

库函数是在标准库中对应的头⽂件中声明的,所以库函数的使⽤,务必包含对应的头⽂件,不包含是 可能会出现⼀些问题的。Returns the square root of x.(返回平⽅根)Compute square root 计算平⽅根。3. 参数和返回类型说明。

2023-09-18 12:48:55 62

原创 扫雷游戏的代码实现

再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和⾮雷的信息(0),假设我们排查了某 ⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录 存储,并打印出来,作为排雷的重要参考信息的。我们专⻔给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再 给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不⼲扰了,把雷布置到 mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期 排查参考。

2023-09-17 10:47:00 44 1

原创 分支与循环——随机数的生成与猜数字游戏的实现

rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,RAND_MAX的大小是 依赖编译器上实现的,但是⼤部分编译器上是32767。其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正 的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。文件是:stdlib.h。程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。

2023-09-16 09:37:42 61 1

原创 分支与循环——循环的嵌套

注意:goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以建议是能不⽤尽量不去使⽤;但是在多层循环的代码中,如果想快速跳出使⽤goto 就⾮常的⽅便了。3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。找出100~200之间的素数,并打印。2. 需要产⽣2~i-1之间的数字。1. 使⽤循环解决。

2023-09-15 10:53:13 32

原创 break和continue语句

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执行。continue的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

2023-09-05 20:04:35 24

原创 分支和循环——do-while循环

在do-while循环中先执行语句,执⾏完语句,再去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,达式为真,就会进行下一次,表达式为假,则不再继续循环。输⼊⼀个正整数,计算这个整数是几位数?

2023-09-02 21:56:00 30

原创 分支与循环——for循环

首先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束;=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继 续。for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。

2023-08-25 21:11:04 23 1

原创 分支和循环——while循环

2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4。3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。输出:4 3 2 1。

2023-08-25 13:39:32 40 1

原创 分支和循环——switch语句

上⾯代码中,根据表达式expression不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏default分⽀。注意:switch后的expression必须是整形表达式而case 后的值,必须是整形常量表达式。

2023-08-24 13:37:13 56 1

原创 分支和循环——操作符

| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。, i < j 返回 0 或 1 ,所以最终是 0或 1与变量 k 进⾏⽐较。• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

2023-08-23 15:53:37 33 1

原创 分支和循环——if语句

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

2023-08-22 17:14:22 30

原创 数组练习题

二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。

2023-08-22 11:04:18 34 1

原创 数组(二维)

它的好处是程 序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。,在程序运⾏的时候,根 据变量的⼤小来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。,二维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。⼀维数组做为数组的元素,这时候就是⼆维数组。

2023-08-21 14:45:05 25

原创 数组(一维)

1。

2023-08-20 11:48:01 41

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除