自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言——深入理解指针(3)

所以比较 str3 和 str4 的值得到的结果是相同的,输出的第二行是"str3 and str4 are same."这是两个初始地址不同的数组,因此str1 和 str2 的值也不相同,所以输出的第一行是"str1 and str2 are not same."首先我们再理解⼀下⼆维数组,⼆维数组可看做每个元素是⼀维数组的数组,也就是二维数组的每个元素是⼀个⼀维数组。p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个大小为10个整型的数组。所以 p是⼀个指针,指向⼀个数组,叫。

2024-02-16 00:04:16 1181 2

原创 C语言——深入理解指针(2)

arr[i] 是访问 arr 数组的元素,arr[i] 找到的数组元素指向了整型⼀维数组,arr[i][j]就是整型⼀维数 组中的元素。sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)。上述的代码模拟出⼆维数组的效果,实际上并非完全是⼆维数组,因为每⼀行并非是连续的。数组在内存中是连续存放的;形参的数组是不会单独再创建数组空间的,所以形参的数组是可以省略掉数组大小的。

2024-02-14 23:59:27 957 1

原创 C语言——从头开始——深入理解指针(1)

对于指针也是,在使⽤之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是,就不能直接使⽤,如果不是,我们再去使⽤。看上图,我们通过调试发现:在main函数内部,创建了a和b,a的地址是0x00cffdd0,b的地址是0x00cffdc4,在调⽤ Swap函数时,将a和b传递给了Swap函数,在Swap函数内部创建了形参x和y接收a和b的值,但是 x的地址是0x00cffcec,y的地址是0x00cffcf0,x和y确实接收到了a和b的值,所以*p = 2,这个操作符就是把a改成了2。

2024-02-13 19:03:21 1481 1

原创 C语言——操作符详解(2)

简单看⼀下汇编代码,就可以分析清楚这段代码中的第⼀个 + 在执⾏的时候,第三个++是否执⾏,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定第⼀个 + 和第三个前置 ++ 的先后顺序。以上表达式,操作符的优先级只能决定 -- 的运算在 + 的运算的前⾯,但是我们并没有办法得知, + 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。

2024-02-09 13:34:59 934 1

原创 C语言——操作符详解(1)

上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单⽬操作符,思考一个问题:上述操作符中有哪些操作符和⼆进制有关系,我们先铺垫⼀下⼆进制的和进制转的知识。其实我们经常听到的2进制、8进制、10进制、16进制,只是数值的不同表⽰形式而已。两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。如:2进制的01101011,换成16进制:0x6b;编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数。如:2进制的01101011,换成8进制:0153;

2024-02-08 20:15:17 1043

原创 C语言——函数栈帧的创建和销毁与有关问题解答

当我们函数调完要返回时,弹出 ebp 就能够找到我们原始上一个函数调用的 ebp,然后桟 顶指针往下走的时候就能够找到esp的顶,就回到我们的桟帧空间,然后因为我们记住了 call 指令下一条指令的地址。当我们在调动函数之前,我们就把 call 指令的下一条指令的地址记住了,push 进去 了,把 ebp 调用这个函数的上一个函数的桟帧的 ebp 也存进去了。因为局部变量不初始化时,函数栈帧里的值是随机放进去的;

2024-02-07 17:54:57 570 1

原创 C语言----函数递归(自我总结)

函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。有时候,写一个代码,虽然递归难以想到,但是使用递归写出的代码会非常的简单,往往一个代码使用递归写可能就几行代码,写成迭代的方式,就得十几行甚至几十行代码。递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计 算,而且递归层次越深,冗余计算就会越多 ,从而计算所发费的时间也越多。递归的条件:n>0;

2024-02-06 19:06:44 1040 1

原创 C语言----函数

但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性,只能自己所在的源⽂件内部使⽤了,其他源⽂件,即使声明了,也是⽆法正常使⽤的。作⽤域(scope)是程序设计概念,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤) 的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使 ⽤ extern 进⾏声明,然后使⽤。⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中。

2024-02-05 06:45:00 868 1

原创 统计二进制数中1的个数(用多种方法)

第一次循环:n = 1111 n = n & (n - 1) = 1111 & 1110 = 1110。第二次循环:n = 1110 n = n & (n - 1) = 1110 & 1101 = 1100。第三次循环:n = 1100 n = n & (n - 1) = 1100 & 1011 = 1000。第四次循环:n = 1000 n = n & (n - 1) = 1000 & 0111 = 0000。printf("1的个数有%d个\n", ret);统计二进制数中1的个数。

2024-01-27 22:22:54 608 1

原创 扫雷小游戏代码

/ mine ROWS COLS '0' '*' 通过InitBoard(mine, ROWS, COLS, '0', '*');printf("很遗憾,你被炸死了······\n");printf("该坐标已经被排查了,请重新输入坐标\n");printf("坐标错误,请重新输入\n");printf("------扫雷游戏------\n");printf("请输入要排查的坐标:");printf("请选择:>");

2024-01-22 00:13:11 811

原创 C语言二维数组

—> 只初始化了三个元素,剩下的都为0。以史为鉴:C99之前数组的大小只能使用常量或者常量表达式指定,或者初始化数据以省略数组大小。注:变长数组的意思是数组的大小可以使用变量指定。可见上述坐标(1,3)打印对应的元素是5,因为下标是从0开始的。

2024-01-14 18:15:59 303 1

原创 C语言一维数组(自我总结)

type 指定的是数组中存放数据的类型。arr_name 指的是数组名的名字;数组下标:C语⾔规定数组的下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1。(sizeof 是C语⾔中的⼀个关键字,可以计算类型或者变量大小也可以计算数组的大小)数组中存放的是1个或多个数据并类型需是相同的,但是数组元素个数不能为0。数组的总大小 除 数组一个元素的大小即为数组的元素个数。数组在创建时,需要给定⼀些初始值,就是数组的初始化。[ ] 为常量值是⽤来指定数组的大小;数组是一组相同类型元素的集合。

2024-01-14 15:00:04 447 1

原创 C语言的分支和循环语句(自我总结)

如果是素数,就打印,不是素数就跳过。上述循环中,当i等于5,就执⾏continue,直接跳过continue后的代码,因为这⾥跳过了n= n+1,所以n⼀直为5,程序陷⼊和死循环。,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。在C语⾔中,0为假,⾮0为真,也就是表达式的结果如果是0,则语句不执⾏;|| :或运算符,表或者(两侧⾄少有⼀个表达式为真,则为真,否则为假)---->一真则真,全假则假。&& :与运算符,表并且(两侧的表达式都为真,则为真,否则为假)---->一假则假,全真则真。

2024-01-11 08:00:00 781 1

原创 猜数字游戏(C语言)

/生成a~b的随机数的公式:a+rand()%(a-b+1)printf("很遗憾,六次机会已用完,挑战失败!随机数是:%d\n", ret);printf("恭喜你,猜对了,数字是:%d\n", ret);printf("选择错误,请重新选择\n");printf("你还有%d次机会",count);printf("请输入要猜的数字:>");printf("退出游戏\n");printf("猜小了\n");printf("猜大了\n");printf("请选择:>");

2024-01-10 13:25:37 336

原创 吾乘之帆,愿得青云之志(自我介绍)

为了学好编程技术,我决定报课学习,跟随老师的步伐,一步一个脚印,做笔记,完成作业,制定学习目标和计划,每周花4到5天的时间学习(特殊情况抽出多余的时间来学习)。个人还有一个长远的理想目标:创业——— 顺应时代发展潮流开发一项工程,让人们的生活质量得以进一步提升(安得广夏千万间,大辟天下寒士俱欢颜!我是一名准大一新生,目前学习的专业是计算机应用技术专业,对计算机语言的了解仍然是处于模模糊糊的阶段。当前我学习编程的目的是:拥有一技之长,以至于为未来生计以及职业发展打下坚实的基础。给全世界,我们的荣耀!

2023-12-31 17:48:14 328

空空如也

空空如也

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

TA关注的人

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