自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言学习20(深入理解指针——数组指针,函数指针,函数指针数组,typedef关键字,转移表)

⾸先我们再次理解⼀下⼆维数组,⼆维数组其实可以看做是每个元素是⼀维数组的数组,也就是⼆维数组的每个元素是⼀个⼀维数组。所以,根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀维数组的地址。解释:p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个⼤⼩为10个整型的数组。那要把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀⾏这个⼀维数组的地址。

2025-02-09 14:38:26 628

原创 C语言学习19(深入理解指针——二级指针,指针数组,冒泡序列)

同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。⾸先从⼀个问题开始,我们之前都是在函数外部计算数组的元素个数,那我们可以把数组传给⼀个函数后,函数内部求数组的元素个数吗?&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)

2025-02-06 21:29:30 540

原创 C语言学习18(VS调试技巧)

当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给⽤⼾使⽤的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个版本是⽤⼾使⽤的,⽆需包含调试信息等。试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,重新测试。在打开内存窗⼝后,要在地址栏输⼊:arr,&num,&c,这类地址,就能观察到该地址处的数据。除此之外,在调试的窗⼝中还有:⾃动窗⼝,局部变量,反汇编、寄存器等窗⼝,⾃⾏验证使⽤⼀。

2025-02-03 22:51:17 683

原创 C语言学习17 (内存函数)

主要讲解了memcpy,memmove,memset,memcmp四个内存函数的用法以及模拟实现。

2025-01-17 15:17:15 508

原创 C语言学习16(字符串函数)

一、字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是<ctype.h>这些函数的使⽤⽅法⾮常类似,我们就以一个函数举例,其他的⾮常类似:islower是能够判断参数部分的c是否是⼩写字⺟的。通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回0。练习:将一个字符串中的小写字母转大写,其它的不变。

2025-01-13 02:11:45 575

原创 C语言学习 15(指针学习2)

这篇文章主要讲述了const修饰指针、野指针、assert断言、指针的使用和传址调用这四个方面,希望大家看完能更加了解指针的使用方法和本质。

2024-12-05 12:39:52 821

原创 C语言学习 14(编程题)

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,

2024-11-29 19:40:27 1099

原创 C语言学习 13(编程题)

以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数。可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。请利用数轴来分界,定位。6、由于 i * j = 168, j>=2,则。

2024-11-28 17:17:20 725

原创 C语言学习 12(指针学习1)

硬件编址也是如此我们可以简单理解,32位机器有32根地址总线,每根线只有两态,表⽰0,1【电脉冲有⽆】,那么⼀根线,就能表⽰2种含义,2根线就能表⽰4种含义,依次类推。我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是 8GB/16GB/32GB 等,那这些内存空间如何⾼效的管理呢?虽然整型变量占⽤4个字节,我们只要知道了第⼀个字节地址(内存的存储是连续的,在同一个变量下),顺藤摸⽠访问到4个字节的数据也是可⾏的。

2024-11-26 23:59:21 1153

原创 C语言学习 11(函数递归)

函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。当我们n输⼊为50的时候,需要很⻓时间才能算出结果,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是⾮常低效的,那是为什么呢?事实上,我们看到的许多问题是以递归的形式进⾏解释的,这只是因为它⽐⾮递归的形式更加清晰,但是这些问题的迭代实现往往⽐递归实现效率更⾼。n的阶乘和n-1的阶乘是相似的问题,但是规模要少了n。

2024-11-21 14:35:47 1019

原创 C语言学习 10

tip:上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单⽬操作符,今天继续介绍⼀部分,操作符中有⼀些操作符和⼆进制有关系,我们先铺垫⼀下⼆进制的和进制转换的知识。同上,操作符的优先级只能决定⾃减 -- 的运算在 + 的运算的前⾯,但是我们并没有办法得知, + 操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义的。其实10进制的每⼀位是有权重的,10进制的数字从右向左是个位、⼗位、百位....,分别每⼀位的权重是。各种运算符的优先级是不⼀样的。

2024-11-17 16:16:54 896

原创 C语言学习 9

我们在棋盘上布置了雷,棋盘上雷的信息(1)和⾮雷的信息(0),假设我们排查了某⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。这⾥我们肯定有办法解决,⽐如:雷和⾮雷的信息不要使⽤数字,使⽤某些字符就⾏,这样就避免冲突了,但是这样做棋盘上有雷和⾮雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。

2024-11-13 15:21:08 552

原创 C语言学习8

最近学的不是很多,只能更几个C语言小游戏给大家看看。

2024-11-06 22:53:57 2196

原创 C语言学习 7

C语⾔的国际标准ANSI C规定了⼀些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。嵌套调⽤就是函数之间的互相调⽤,每个函数就像⼀个乐⾼零件,正是因为多个乐⾼的零件互相⽆缝的配合才能搭建出精美的乐⾼玩具,也正是因为函数之间有效的互相调⽤,最后写出来了相对⼤型的程序。我们可以把函数想象成⼩型的⼀个加⼯⼚,⼯⼚得输⼊原材料,经过⼯⼚加⼯才能⽣产出产品,那函数也是⼀样的,函数⼀般会输⼊⼀些值(可以是0个,也可以是多个),经过函数内的计算,得出结果。

2024-10-31 15:17:02 1168

原创 C语言学习 6

有⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。这⾥我们选择第⼀个元素算⼤⼩就可以。前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元。

2024-10-28 20:08:09 991

原创 C语言学习 5

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break。在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是。到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在。

2024-10-26 20:57:41 1100

原创 C语言学习 4

为什么呢,因为这样编写,会让else与第一个if对应,跳过了第二个if,但实际上else是与第二个if匹配的,嵌套在第一个if语句下,第一个if不成立的话,嵌套语句就没机会执行了。如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。输入一个整数,如果是正数,再判断是奇数还是偶数,并输出。|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是。

2024-10-23 12:44:13 1219

原创 C语言学习 3

解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以计算技术后,a和b都是11。a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是。++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--所以,输出字符串的头部有两个空格。对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

2024-10-19 19:33:05 2144

原创 C语言学习 2

有些长度并不固定(遵循C语言标准):sizeof(long)>=sizeof(int) sizeof(long double)>=sizeof(double)在代码进⾏编译的时候,就根据表达式的类型确定了,⽽表达式的执⾏却要在程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就。除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。的取值范围是:0~65535,最⼤值增⼤到了65,535。

2024-10-16 17:13:21 2302

原创 C语言学习 1

十六进制(H):0~9,A(10),B(11),C(12),D(13),E(14),F(15)。括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个字符串(用%s或者直接打印)。在键盘上可以敲出各种字符,如:a,b,@,#等,这些符号都被称为字符,C语⾔中字符是⽤。复合语句:复合语句其实就是代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句。:制表符,光标移到下⼀个水平制表位,通常是下⼀个4/8的倍数。:垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀行的同⼀列。

2024-10-15 22:56:26 724

原创 初学C语言(编程技术)前的想法认识

C语言学前认知

2024-10-06 18:32:32 336

空空如也

空空如也

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

TA关注的人

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