自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 预处理详解

C语言设置了一些预定义符号,可以直接使用,预定义符号也是预处理期间处理的宏其实是有参数的参数列表 内容 把参数列表里的东西替换到内容里面去是一个由逗号隔开的符号表,可能出现在stuff中参数列表的左括号必须与name紧邻不能有空格,如果存在空格,参数列表就会被解释未为stuff的一部分#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)

2024-06-29 15:24:41 669

原创 编译和链接

经过预处理后的 .i 文件中不再包含宏定义,因为宏已经被展开,并且包含的头文件都被插入到 .i 文件中,所以当我们无法知道宏定义或者头文件是否包含正确的时候,可以查看预处理后的 .i 文件来确认。1.程序必须载入内存中(任何程序运行起来都是占有内存的),在有操作系统的环境中:一般这个由操作系统完成,在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。目标文件 object。2)处理所有的条件编译指令,eg:#if,#ifdef,#elif,#else,#end if。

2024-06-21 14:16:29 936

原创 文件操作(总)

a是内存上的一块区域如果程序退出,则内存回收,数据丢失了,再次运行就看不到上次的数据了为了持久化保存,我们可以使用文件。

2024-06-14 00:50:36 872

原创 动态内存管理

向内存申请空间的方式有两种方式1.单个值 2.一组值int i=1;1)但开辟的空间大小是固定的,大小是不可变化的2)数组在声明的时候,必须指定数组的长度,数组空间一旦确定了大小就不能调整有时候我们需要的空间的大小在程序运行时才能知道,那数组开辟空间的方式就不能满足了,存在大(浪费),小(不够),刚刚好的情况C语言引入了动态内存开辟,让程序员可以自己申请和释放空间,就可以比较灵活。

2024-06-04 15:27:26 727

原创 联合和枚举(自定义类型)

把可能的值一一列举赋的值是可能取值。

2024-06-01 17:25:57 213

原创 结构体(自定义类型)

匿名结构体类型如果没有对结构体类型重命名,基本上只能使用一次这个类型是没有名字的,但我们创建变量x。

2024-05-29 17:48:55 739

原创 数据在内存中的存储

整数的二进制表示方法有原码反码和补码三种三种表示方法均有符号位和数值位两部分,最高位被当作符号位,剩余的都是数值位。

2024-05-26 22:13:39 591

原创 C语言内存函数

目标空间的地址 源空间的地址 被拷贝的字符个数。2)函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。1)不确定拷贝的是什么类型的数据,用void*,void* 的指针不能直接运算,无具体类型的指针。4)memory函数不负责重叠内存的拷贝,只负责不重叠的内存。是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。memmove处理的源内存块和目标内存块是可以重叠的。非要负责重叠内存的拷贝,结果是未定义的。

2024-05-25 21:01:36 173

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

C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的,这些函数的使用都需要包含一个头文件 ctype.h。

2024-05-25 13:17:33 574

原创 了解指针(5)

统计的是strlen函数的参数str中这个地址开始向后,\0之前字符串的个数。strlen函数会一直向后找\0字符,直到找到为止。strlen是求字符串长度的。

2024-05-17 14:35:17 284

原创 了解C语言

字符串的末尾隐藏放着一个\0字符(占一个字节),\0是字符串结束的标志,所以我们在使用库函数printf()打印字符串或者strlen()计算字符串长度的时候,遇到\0就自动停止了。计算机中所有的数据都是以二进制的形式存储的,我们不清楚这些字符在内存中以什么养的二进制存储。对应的大小写的ASCII码值的差值是32(A和a)2)程序员在创建标识符的时候是不能和关键字重复的。1)关键字都有特殊的意义,是保留给C语言使用的。编码:给这些字符中的每个字符编一个二进制序列。C语言中的字符遵循ASCII编码的方式。

2024-05-17 10:46:46 165

原创 了解指针(4)

void*类型不能解引用,强制类型转换为int*类型的指针。将bubble_sort函数改造成通用的算法,实现排序任意类型的数据。通过函数指针*cmp调用函数(回调函数的思想)名字是字符串,字符串比较使用strcmp函数。qsort默认是升序的,我们也可以使之为降序。1.使用qsort函数排序整型数据。2.qsort函数排序结构体数据。A.按照名字比较两个数据体数据。B.按照年龄比较两个结构体数据。2)A.按照名字排序结构体数据。2)B.按照年龄排序结构体数据。width的单位字节。

2024-05-15 17:10:22 262

原创 了解指针(3)

parr1先和[ ]结合,说明parr1是数组,数组的内容是int (*)()类型的函数 指针(parr1)整型指针 ----int * --指向整型的指针----整型指针变量中存放整型变量的地址。字符指针 ----char*--指向整型的指针----字符指针变量中存放字符变量的地址。数组名是数组首元素的地址,一维数组传参的时候,传递的是数组首元素的地址。数组指针 ----指向数组的指针 ----数组指针变量中存放。

2024-05-14 15:25:07 591 1

原创 了解指针(2)

int arr[5];这里的数组名也表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)int * arr[6];一个整型的地址+1 ------ 跳过一个整型。一个字符的地址+1 ------ 跳过一个字符。一个数组的地址+1 ------ 跳过一个数组。这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。数组就是数组,是一块连续的空间,是存放一个或多个数组的。

2024-05-10 22:57:04 224

原创 了解指针(1)

如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里,可以给指针赋值NULL(C语言中定义的一个标识符常量,其值为0,0也是地址,只是这个地址是无法使用的,读写该地址会报错)4.1 修饰变量-------变量是可以修改的,如果把变量的一个地址交给一个指针变量,通过指针变量可以修改这个变量,但是我们可以加上一些限制。2)const在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容可以通过指针改变。&------取地址操作符,拿到变量a的地址。

2024-05-07 20:37:43 829 1

原创 操作符的介绍

1. & 按位与 ------------------------- 对应的每一位有0则为0,都为1才为1。arr[9]=10;4. ~ 按位取反 -------------------------- 二进制的每一位都取反。3. ^ 按位异或 -------------------------- 相同为0,相异为1。,打印出来的数是补码转化为原码再二进制转为十进制,打印出的是十进制。

2024-05-02 23:52:34 639 1

原创 函数的递归

3.求第n个斐波那契数(第n个数的值是第n-1个数的值加上第n-2的数的值之和)------>不适合使用递归求解,但是是使用递归的形式描述的,但是使用递归方式计算,计算是非常冗余的,会有重复计算,我们就得想使用迭代的方式计算。每一次函数调用,都要为这次函数调用分配内存空间,是内存的栈区上分配的,如果无限地递归调用函数,就会将栈区空间填满(使用完),这时就会出现栈溢出·的现象。n级台阶时,假设我们总共有Func(n)种跳法。剩下有Func(n-1)种跳法。剩下有Func(n-2)种跳法。

2024-05-02 13:49:13 144 1

原创 错题(2)

int占四个字节,指针表示地址空间个数,总共有2^32个,系统可以使用的最大内存空间占四个字节。int占四个字节,指针表示地址空间个数,总共有2^64个,系统可以使用的最大内存空间占八个字节。9.写一个递归函数,输入一个非负整数,返回组成它的数字之和。是字节有地址不是每个bit位(一个字节八个bit位)都有地址,地址可以唯一标识一个内存单元。

2024-05-02 00:02:16 9 1

原创 VS实用调试技巧

2)F5:启动调试,经常用来直接跳到下一个断点处(遇到断点的位置可以停下来),一般配合 F9使用 //让程序执行到(运行逻辑上的)下一个断点处。通过F5启动调试以后能直接跳到我们的断点处进行调试(使程序执行到想要的位置),节省时间。3)F10:逐过程,通常用来处理一个过程,可以是一次函数调用也可以是一条语句。(2) 内存:【调试】---->【窗口】---->【内存】【调试】---->【窗口】---->【监视】,必须使用F11,使用F10是完成函数调用。

2024-04-29 15:20:12 242

原创 计算某年某月有多少天

第二种,我们还可以使用bool类型(其他的相同)先判断是否为闰年,因为闰年的二月份有29天。创建年和月的变量,输入想计算的某年某月。第二步判断是否是闰年并且确定月份。(使用了函数的嵌套调用)

2024-04-27 20:49:05 111

原创 函数的知识点

印2,一个字符,所以第三个printf打印1。库函数也是函数,是一些已经是现成的函数,我们需要学会直接使用就可以了,这些库函数根据功能的划分都在不同的头文件中进行了声明。3) return返回的值和函数返回类型不一致,系统会自动会将返回的值隐式转换为函数的返回类型。函数的声明,类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中。3.形参如果是一维数组,数组的大小可以不写,二维数组时,行可以省略,列不能省。库函数是在标准库中对应的头文件中声明的,库函数的使用,务必包含对应的头文件。

2024-04-26 21:25:59 554 1

原创 数组的一些补充

-------------------有十个元素,全都初始化为零。------------------------这种数组只有一个元素。这里可以用strlen(求字符串或者字符数组),因为这里是字符串。system("cls")//清理控制台屏幕的信息。Sleep(1000)//休眠1000毫秒。2.实现多个字符从两端移动,向中间汇聚。这样就可以观察到变化的过程。3.二维数组打印地址。4.一维数组打印地址。

2024-04-26 16:32:26 87 1

原创 与数组相关

----------------第一个元素初始化为1,剩余的元素默认初始化为0。---------其余值默认初始化为0。-------------int arr[3][5]1.2数组的初始化-----------我们对数组进行初始化一般使用大括号,将数据放在大括号里面。2.1数组的下标------下标是从0开始的,如果数组有n个元素,则最后一个元素的下标是n-1.如果我们要访问下标为6的元素我们就可以使用arr[6]--------在数组中是第七个元素。

2024-04-23 15:54:09 596

原创 C语言分支和循环(2)

相当于括号里面的是一个“种子”,产生的随机数是通过某种算法产生的伪随机数,要想使这个数成为真正意义上的随机数,要让这个种子时刻在变化,这样才能让这个随机数成为真正的随机值。如果timer是NULL,就只返回这个时间的差值----time返回的这个时间差也被叫做:时间戳。生成100~200-----100+rand()%(200-100+1);生成1~100-------rand()%100+1;生成0~99--------rand()%100;1.rand函数---这个函数是可以生成随机数。

2024-04-23 14:51:28 287

原创 错题集(1)

while循环中,当条件表达式成立时才会执行循环体中的语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束---------是指用整型变量或表达式声明或定义的数组,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的(一旦确定大小后,它的大小是固定的,无法改变)(3,4)为逗号表达式,取后者,所以不会打印3-----1,2,4,5。第一种情况:对应的字符不一样时,此时的字符大小就是字符串的大小。

2024-04-19 17:26:30 365 1

原创 一些小总结(杂)

1.strlen是一个库函数-求字符串的长度,统计的是\0之前的字符个数strlen返回值是size_t类型的,应该使用%zd2.3.注意下面两种转义字符1)\ddd:ddd表示1~3个八进制的数字\130 130是八进制,转化成十进制=1*8*8+3*8+0*1(8的一次方)=88再对照ASCLL码表可知此处表示的字符就是x2) \xdd:dd表示两个十六进制数字\x30 30是十六进制,转化成十进制=3*16+0*1=48同理此处表示字符0。

2024-04-16 18:35:49 747

原创 C语言分支和循环

while和for循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环而do-while循环则是先直接进入循环,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会执行下一次,否则就不再继续循环。4.switch语句-------一种特殊形式的if...else语句,用于判断有多个结果的情况。2)&&:与运算符---------左边的操作数为零(假)的时候,就无需执行右边的操作数。3)||:或运算符----------操作符左边的操作数结果为真时,就无需执行右操作数。

2024-04-10 23:13:09 266 1

原创 自我介绍及目标

另外,对于编程的学习不能只局限于学校的课程,应该充分利用网络资源和相关学习软件里的资料。1.多看学习课程,像哔哩哔哩,Mooc等一些自学平台都有大量的学习资源。2.积极参加各类竞赛,在参加竞赛的过程中积累经验。3.要有自己的学习规划,不要只跟着学校的步子。4.当然更多的是靠自己的总结和练习以及长期的积累。编程的学习是一个日积月累的过程,每天的学习时间控制在一到两个小时之间。我是一名大一生,来自江西,我的名字叫丁曼。刚刚步入大学对大学的生活充满了憧憬,非常想利用好这个平台去努力提升自己。

2024-03-31 18:46:38 256 1

原创 扫雷游戏的实线

扫雷的棋盘是9*9的格子,随机布置十个雷,把十个雷都找出来,排雷成功,游戏结束。在扫雷的过程中有排雷的步骤,棋盘上有雷和非雷的信息,还有排查出的雷的个数信息,就比较混杂。这时我们专门给一个棋盘存放布置好的雷的信息,再给另外一个棋盘存放排查出的雷的信息,分别对应数组mine和数组show。把雷布置到mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查参考。最后就是扫雷游戏的代码的实现,打出头文件的代码之后就要进行菜单和游戏规则游戏步骤的设计。

2023-10-30 16:09:03 19 1

原创 C语言分支循环语句

在C语言中,0为假,非0表示真。switch语句是一种特殊的if...else结构,switch中的case分支,只有在switch语句中使用break才能跳出switch语句,有break才能实现真正的分支效果。switch中的default是当switch后面的表达式中的值无法匹配代码中case语句的时候,可以在switch后面加上default语句。有了分支和循环,我们就可以利用rand函数生成随机数,用srand函数初始化随机数的生成器,设置猜数字的游戏,合用if和else使游戏设定更加完整。

2023-10-23 23:18:47 15 1

原创 简述学习方向

另外,对于编程的学习不能只局限于学校的课程,应该充分利用网络资源和相关学习软件里的资料。1.多看学习课程,像哔哩哔哩,Mooc等一些自学平台都有大量的学习资源。2.积极参加各类竞赛,在参加竞赛的过程中积累经验。3.要有自己的学习规划,不要只跟着学校的步子。4.当然更多的是靠自己的总结和练习以及长期的积累。编程的学习是一个日积月累的过程,每天的学习时间控制在一到两个小时之间。我是一名大一新生,来自江西,我的名字叫丁曼。刚刚步入大学对大学的生活充满了憧憬,非常想利用好这个平台去努力提升自己。

2023-10-15 11:23:13 20

空空如也

空空如也

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

TA关注的人

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