自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据在内存中的存储

整数在内存中的存储以二进制的形式,用到原码,反码,补码的知识。在有符号整型中,第一位是符号位,其他的31位是数值位,而无符号整型32位都是数值位。对于负数而言,原码符号位不变,其他数取反得到反码;反码加一得到补码。对于正数而言,原码反码补码都相等,就是二进制的表达形式。至于为什么要设计原反补三种类型:因为CPU只有加法器,由于原码和补码可以通过取反加一的方式互相转换,因此减法可以利用加法器处理,不需要设计额外的硬件电路。

2024-06-11 22:59:46 617 1

原创 c语言内存函数

函数的基本格式:void * memcpy ( void * destination, const void * source, size_t num );它的作用是将待拷贝的内存拷贝到目标内存中去,返回destination。它好像是加强版的strncpy,它不仅可以copy字符串,也可以copy整型数组,浮点数数组等等。size_t num指的是拷贝的字节数,注意不是元素的个数。

2024-06-11 13:37:37 300

原创 字符函数与字符串函数

我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了 ⼀系列库函数,下面来介绍这些函数。

2024-06-09 20:42:46 691

原创 qsort函数的使用详解

return c;2.按名字排序struct stuint age;return c;

2024-05-16 20:20:44 246

原创 深入理解指针(4)

我们在之前已经学过字符指针,也就是指向字符的指针。但这里我们介绍另外一种字符指针的初始化方法。pstr此时是字符指针,在这里初始化的值是“hello bit.”但这是将字符串放到一个指针中显然不合适。那么这里是什么意思呢?实际上pstr中存放的是字符串中首元素的地址,也就是“h”的地址。我们将pstr与“hello bit”的地址打印,发现二者的值相等。得到的结果表示:str1 str2是不相等的,也就是他们虽然首元素都是“h”,但在内存中存放的位置是不一样的。

2024-05-13 23:40:20 689 1

原创 深入理解指针(3)

我们说数组名实际上是数组首元素的地址,用下面这一串代码可以证明。

2024-05-12 20:03:00 842 1

原创 关于操作符的一些操作

• 算术操作符: + 、- 、* 、/ 、%• 移位操作符: >• 位操作符: & | ^• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>= 、&= 、|= 、^=• 单⽬操作符:!、++、--、&、*、+、-、~ 、sizeof、(类型)• 关系操作符: > 、>= 、< 、

2024-05-02 01:19:16 7 1

原创 深入理解指针(2)

现有一个变量int a=0;如果我们想改变他的值,直接进行赋值操作a=1即可。但是如果我们在int a的前面用const进行修饰(const可以修饰变量);再想通过赋值操作进行修改,则发现编译不通过,“表达式必须是可修改的左值”,此时的a称作常变量,也就是不能修改的变量。虽然表面上不可以改,但是如果我们通过&a找到a的地址,在利用解引用去修改是可以的。但注意虽然这样的操作是可以达到目的的,但是不建议这样操作,是打破语法规则的行为。接下来介绍重点,此时const修饰的是特殊的变量指针变量。

2024-05-02 01:03:19 6 1

原创 深入理解指针(1)

但是也有局限性,因为解引用操作需要知道指针的类型来确定访问的权限,指针的+-也需要知道指针的类型来确定步长,因此 void* 类型的指针不能直接进 ⾏指针的+-整数和解引⽤的运算。那么地址是怎样编排的?而将三者+1后的地址是不一样的,char类型的指针向后移动了1个字节,int 类型的指针向后移动了4个字节,而&a+1也移动了4个字节(因为此时编译器判断a是整形类型,如果b是字符类型,那么&b+1向后移动1个字节)。看得出来,将a的地址,放入整形指针的地址,以及放入字符指针的地址,三者的值都是一样的。

2024-04-28 16:34:34 889

原创 由数组的越界访问导致的死循环

在不同的编译器,不同的环境,空出来的整形空间都可能是不一样的。但如果保持代码不变,换一个环境或编译器可能就直接报错不会死循环:如果保持环境与编译器不变,将i的创建放在arr创建之下,由于栈区内存的使用习惯,i与arr的内存就不可能一样,也就不出现死循环直接报错。但是原本i下一次即将进入13的时候,突然赋值成了0,于是就出现了0-12,0-12,0-12的死循环,这又该如何解释?正因为arr的越界访问,使arr【12】的地址与i的地址恰好相同,在给arr【12】赋值为0的同时将i也赋值成了0。

2024-04-23 22:25:01 298

原创 函数的递归与迭代

递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。“递”的意思是递推,“归”意思是回归。这样解释不太好理解,下面举例。前置打印下面我们首先举出一个例子:实现一个函数print1,功能是接收一个整形数据,打印此整形的每一位的数字,比如输入15867,就打印1 5 8 6 7。

2024-04-22 23:16:48 655

原创 扫雷游戏的实现

最后还想要强调一点,就是此次的代码中的行与列都没有用实际的数字去表示,而是用ROW,COL来代替,就是万一以后想要扩充棋盘的大小,比如说转成12*12的棋盘,就可以直接改动ROW,COL的值,不用在改变其余的代码了。这次做的是9*9的棋盘。其中第一个是实现棋盘初始化的函数,第二个是显示棋盘的函数,第三个是随机设置雷所在位置的函数(这里设置10个雷),第四个是雷的查找函数,第五个也是第四个函数的子函数,用于统计xy坐标周围雷的个数。如图所示,扫雷游戏实现后大概是长这个样的。

2024-04-21 18:48:29 168 1

原创 关于c语言的分支循环语句

switch (expression) { case value1: statement case value2: statement default: statement } 1 2 3 4 5 上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。在检查while()条件是否为真之前,该循环首先会执行一次do{}之内的语句,然后在while()内检查条件是否为真,如果条件为真的话,就会重复do…当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。

2024-04-20 19:41:18 319

原创 自我介绍及目标

关于我的自我介绍,规划与目标

2024-03-30 11:03:53 116 1

空空如也

空空如也

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

TA关注的人

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