自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言文件操作、流、缓冲区

🥑存储在硬盘上的数据信息集合就叫做文件(file),也称为计算机文件。而且文件是以硬盘作为载体的,文件有多种类型,比如文本文件(.txt)、图片(.jpg)、压缩文件(.zip)、Excel电子表格(.xls)等等。程序文件数据文件(从文件功能的角度来分类的)。上面表格中说的适用于所有输入流一般指适用于标准输入流和其他输入流(如文件输入流);所有输出流一般指适用于标准输出流和其他输出流(如文件输出流)。int main()//打开文件return 1;//写文件ch

2024-08-19 22:30:43 780

原创 C语言关于动态内存管理的经典笔试题、柔性数组

🍉1.柔性数组(flexible array)也称为变长数组,是一种动态数组的实现方式。🍊2.与普通数组不同的是,柔性数组在定义时不需要明确指定数组大小,在程序运行时可以动态地分配和扩展数组大小。[引用]🍋3.在c99版本中,结构体中的最后一个成员允许是未知大小的数组,这个数组就叫做『柔性数组』成员。char c;int arr[];//柔性数组int i;char c;//柔性数组。

2024-07-23 23:06:20 880

原创 C语言动态内存管理

⚽️动态内存管理是一种内存管理方法。它允许程序在运行时根据需要🍤动态地申请和回收内存空间🍤。与静态内存管理(如变量和数组的预先分配)不同,动态内存管理根据程序的需求即时分配内存,并且分配的内存大小就是程序要求的大小。🥪能更好地适应系统的动态需求,提高内存的利用率🥪可以根据程序的实际需要分配内存,而不是预先分配固定大小的内存🥪允许程序在不需要时释放内存空间,供其他应用程序使用总结来说,🍔动态内存管理。

2024-07-22 15:41:09 1037

原创 C语言枚举

enum。

2024-07-21 01:05:10 677

原创 C语言联合体

所有成员共用同一块内存空间。

2024-07-21 01:04:51 1051

原创 C语言结构体的大小及在内存中的存储形式

🍏🍏位段又称为位域是以位(bit)为单位来定义结构体(或联合体)中的成员变量所占的空间。C语言中没有专门的位段类型,位段的定义要借助于结构体,即以二进制位为单位来定义结构体成员所占存储空间。从而就可以按照"位"来访问结构体中的成员。[引用]🍏🍏🥥1.位段的成员必须是 int、unsigned int 或signed int,在C99中位段成员的类型也可以选择其他类型🥥2.位段的成员名后边有一个冒号和一个数字struct Sint _a:2;int _b:5;int _c:10;

2024-07-19 00:38:55 968

原创 C语言结构体

在C语言中有很多内置类型,比如int、char、float、double等。还有数组(一组相同类型元素的集合)。它们只能描述一种类型的数据,但是在实际应用中要描述一个复杂类型的对象时,只用一种类型的数据是不行的。例如我们要描述一个人,他有姓名(字符串)、性别(字符串)、年龄(整型)等多种类型的数据。那就需要一种自定义的类型,用来存放各种类型的数据,用这种自定义的类型作为一个整体来描述一个复杂类型的对象。结构体就是将各种类型的数据整合到一起的一种自定义类型。

2024-07-13 22:35:24 750

原创 C语言函数递归

对于这个函数,如果传进去的实参为1234,进入函数就先判断n是否大于9,如果n大于9,就将n/10传给Print函数,这里就又调用了Print函数,直到n的值小于等于9以后,if语句不成立了,就执行printf("%d " , n%10)这条语句,即先打印1234的最高位1,然后返回上一层继续打印百位的2,然后再返回上一层打印十位上的3,最后返回第一层打印个位上的4。从上图可以看出,递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计算,而且递归层次越深,冗余计算就会越多。

2024-05-24 19:52:53 985

原创 C语言操作符(下)

注:以下关于位的操作符讲解都是在32位机器平台下进行的。:右移操作符,把所有的二进制

2024-05-24 19:51:12 625 1

原创 C语言进制转换、原反补码

进制也就是进位计数制,是人为定义的带进位的计数方法。我们经常听到的2进制、8进制、10进制、16进制这些进制。其实就是数值的不同表示形式而已。任何一种进制—如X进制,就表示每一位置上的数运算时都是逢 X 进一位。十进制就是逢十进一,十六进制就是逢十六进一,依次类推x进制就是逢x进位。(1)十进制10进制是生活中最常用的计数方法,十进制数的特点:●10进制中每一位上逢10进1●10进制的数字每一位上都是0~9的数字组成的(2)二进制二进制数的特点:●2进制中每一位上逢2进1●。

2024-05-18 12:41:22 1016

原创 C语言操作符(上)

(1) +(加法运算符):实现两个操作数的加法运算,是一个双目操作符。int a = 2;int b = 3;//实现两个整型变量的加法运算//结果为5//变量和常量相加,结果为8//常量和常量相加,结果为7当+只有一个右操作数的时候,就是正号,它就是一个单目操作符。//结果为10同样的 -(减法操作符):实现两个操作数的减法运算。当 - 只有一个右操作数的时候,它就是负号,就是一个单目操作符。(2) *(乘法操作符):实现两个操作数的乘法运算。键盘上通过shift+8键敲出来。

2024-05-18 12:33:19 795

原创 C语言函数

库函数是不能解决所有事情的,所以更加重要的是自定义函数,所谓自定义函数就是根据自己的需要,我们自己设计的函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数:●ret_type是函数的返回类型●fun_name是函数名●( )中放的是形式参数●{ }括起来的部分称为函数体在设计函数时,可能不止一个形式参数。函数是完成特定任务的一段代码,一般会有参数和返回值,对函数会单独的对过程进行封装和细节的隐藏。需要时直接调用函数即可。

2024-05-06 14:15:55 706

原创 C语言数组介绍

二维数组也是一样的,也是通过下标来访问,只不过二维数组有行和列两个下标,如果要对二维数组进行输入输出的话,就要使用两个for循环,外层循环控制每一行的循环,内层的循环控制每一行里所有元素个数(列数)的循环。二维数组其实可以看作是由一维数组构成的数组,也就是把每行的一维数组整体看做是一个元素,则二维数组现在就相当于一个一维数组,数组的首元素就是第一行的一维数组,则数组名就是第一行一维数组的地址,它是一个数组指针。就像上面的arr[3][4]数组,数组名arr表示的是第一行一维数组的地址,它是一个。

2024-05-05 14:20:13 618 2

原创 C语言指针:数组名在sizeof与strlen中的运算

之前学过,数组名表示数组首元素的地址,但是有两个例外:sizeof(数组名)和&数组名,而这里的&arr就表示取出整个数组的地址,类型为int(*)[5],所以&arr为数组的地址,&arr+1表示跳过整个数组,指向数组后面的内存空间,也是地址,是地址大小就为4/8个字节(看平台)。既然&arr[0]+1表示的是第二行一维数组的地址,对其解引用*(&arr[0]+1)就找到了第二行的一维数组,则通过sizeof求得的就是这一维数组的大小,大小就是4*sizeof(int)=16。

2024-05-02 12:35:57 740 1

原创 C语言指针:指针数组、数组指针、函数指针及函数指针数组

比如int* pi;存放的是整形变量的地址,能够指向整形数据的指针。比如float* pf;存放浮点型变量的地址,能够指向浮点型数据的指针。那么数组指针变量:存放的应该是数组的地址,能够指向数组的指针变量。那要怎么表示数组指针变量呢?int* p1[5];//指针数组上面的代码中,p1是一个指针数组,数组中有5个元素,每个元素是int*类型的。p2就是一个数组指针变量,那要怎么记忆理解呢?首先p2先和*结合,说明p2是一个指针变量变量,然后指向的是一个元素个数为5,元素类型为整型的数组。

2024-04-29 23:50:53 1024

原创 C语言指针:数组名、二级指针

●。

2024-04-25 10:52:37 765 1

原创 C语言指针:野指针

对指针进行free只是把指针所指向的空间释放掉,但并没有把指针本身置为空,此时指针指向的就是垃圾内存,所以释放后的指针应该立即置为NULL,养成良好的编程习惯,以防产生野指针。①如果一个(局部)变量出了作用域或者是这个变量的生命周期结束了,那变量就会被销毁,变量所占的内存会还给操作系统,此时如果还使用指针访问该变量,那就会出现野指针,编译器就会报错了。assert()函数包含在。通过上面的例子就可知道,局部变量一旦离开了作用域,就会被销毁,空间被释放,此时不能再使用这块空间的指针来访问此空间。

2024-04-22 23:20:04 1072

原创 C语言指针:指针类型、void*指针、const修饰及传址调用

在代码2中,还是同样的整型变量n,n中存储的还是0x11223344这个值,通过逐语句(F10)调试起来,我们发现,变量n的地址和代码1中的地址不一样,虽然是同样的变量同样的值,但是当vs编译器再次调试起来的时候,系统会重新为变量n分配内存空间,内存空间的地址也就不一样。可以看到通过这样的方法确实能把n的值改掉,我们知道const修饰n就是为了让n的值不被修改,那如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所以应该让p即使拿到n的地址也不能修改n。

2024-04-20 21:57:39 1000

原创 C语言指针:内存和指针

通过上面对计算机中地址的深入学习可知,在32位机器下,假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或0,那我们把32根地址线产生的2进制序列当做一个地址,那么一个地址就是32个bit位,8个bit位为一个字节,需要4个字节才能存储。但是我们单独说指针变量时,他是一个变量,其中存放的是其他变量的地址,他是可变的。假设有一栋宿舍楼,你的同学就住在这栋宿舍楼里面,如果有一天你想去找他玩,但这栋楼的房间都没有编号,你的同学也不好描述他所在的宿舍位置,你就只能挨个房间去找。

2024-04-19 12:58:58 1016 1

原创 C语言内存编址

如果CPU有32根地址总线,每根地址总线上只能传输0(低电平)和1(高电平)两种电信号(计算机中数据是以二进制的形式存储),所以32根地址总线总共能传送2^32种信息,即CPU的寻址能力能达到2^32,CPU可以对2^32个存储单元进行寻址。CPU访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,而因为内存中字节很多,所以需要给内存进行编址(就如同宿舍很多,需要给宿舍编号一样)。总线是供所有部件通信共享的,任何两个部件之间的数据传输都是通过共享的公共总线进行的。按总线上传输信号的不同来分。

2024-04-19 12:43:42 990 1

原创 C语言关键字、字符、ASCII码及转义字符

一、关键字1.C语言中有一批保留的名字的符号,比如: int、 if、return,这些符号被称为保留字或者关键字。●关键字都有特殊的意义,是保留给C语言使用的。●程序员自己在创建标识符的时候是不能和关键字重复的·关键字也是不能自己创建的。也就是说这些关键字是C语言中本来设计好的,是留给程序员使用的,程序员创建变量时,不能跟关键字重名。2.关键字列举:(每个关键字的含义后面会逐一介绍)上面列举了使用最多的32个关键字。想了解这更多关键字可以访问下面的网站。

2024-03-20 12:07:56 1029 1

原创 C语言main函数及库函数介绍

(3)输出文本里面可以使用多个占位符。但是对应的占位符要有对应的参数,位置不能乱。(2)常用的占位符除了%d,还有%s 表示代入的是字符串。”,就是这个位置可以用其他值代入。

2024-03-12 10:29:49 3306 1

原创 C语言介绍

●人和人交流使用的是自然语言,如:汉语、英语、日语.●那人和计算机是怎么交流的呢?这就要使用计算机语言.(人和计算机交流的语言)●目前已知已经有上千种计算机语言,人们是通过计算机语言写的程序,给计算机下达指令,让计算机工作的。●C语言就是众多计算机语言中的一种,当然C++/Java/Go/Python都是计算机语言。C语言最初是作为Unix系统的开发工具而发明的。1.C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行

2024-03-10 17:24:14 590 2

原创 C语言冒泡排序

一趟冒泡排序使得数列中最大的数到达了最右边(排在第10位),不动这个最大的数,紧接着进行下一趟冒泡排序,对前面剩下的9个数进行第二趟冒泡排序,让这9个数中的最大值到达最后(排在第9位),重复上述步骤,直至整个数列呈现顺序排列。是因为一趟冒泡排序会使数组中最大的数到达最右边,而后进行下一趟冒泡排序时,排在最右边的数相较于前面已经是最大的数,前面的数就不需要再和最右面的元素进行比较,因而每一趟下来,就会减少一次相邻元素的比较。就会减小,所以构造的循环判断条件既是如此。(这里要注意数组的下标是从0开始)

2024-03-08 13:44:05 1880 1

原创 C语言实现扫雷游戏

ROWS。

2024-02-06 20:17:38 2045

原创 C语言分支与循环(下)

for循环中有三个表达式,其中表达式1是用于循环变量的初始化,表达式2是用于循环结束条件的判断,表达式3是用于循环变量的调整。for循环的执行顺序是先进行循环变量的赋值,也就是执行表达式1,然后进行条件判断,也就是执行表达式2,当表达式2为真(非0)时,进入循环体,执行完循环体里的语句后再进行循环变量的调整,也就是执行表达式3。⑵ continue语句在循环语句中的作用是跳过本次循环,意思是当遇到continue语句时,会跳过continue语句后面的语句,直接来到循环变量的调整部分继续执行。

2024-01-27 23:15:52 353

原创 C语言分支与循环(上)

注意:如果单独只有if语句而没有与之相匹配的else语句时,由于C语言是结构化的程序设计语言,有顺序结构,会从上往下执行,当执行到if语句时,if语句只会默认控制紧跟在后面的第一条语句,表达式判断完以后,不管表达式为不为真,都会往下执行if语句控制的第一条语句后面的其他语句。④if else语句还可以嵌套使用,如上面的右图,但是需要注意的是在多重if else语句的嵌套中,else总是与它最近的if相匹配。上图中左图的if else语句其实就是右图的简化,两种写法表达的意思一样。

2024-01-26 22:48:15 374

原创 C语言启程

我叫范钰钊,就读专业为应用统计学,现读大四,马上面临毕业,心中充满着迷茫。但是我对编程感兴趣,希望能通过学习C语言来充实自己,未来还有值得学习的知识。当下想通过学习编程来做自己想做的东西。我一定会努力地学好C语言,为以后的计算机语言打下夯实基础。

2024-01-18 22:51:13 486 2

空空如也

空空如也

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

TA关注的人

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