自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 结构体详解

当我们想描述一个复杂对象时,只凭借C语言提供的类型是不够的。此时我们就可以自定义一个新的类型。在定义一个新的结构体时,有一种比较特殊的方法,第一个结构体用的是最常用的声明方法。第二个则是一种特殊的声明方法,被称为匿名结构体类型。我们可以看到这样定义的结构体是没有名字的。这种声明方法使用的很少,因为没有名字,所以在之后的程序里不能再使用定义一个新的变量。同时需要注意一个易错情况。我们可以看到再上面有两个匿名结构体变量,它们的结构体成员完全一样,那我们是否就可以认为它们是同一结构体?

2023-03-19 23:30:00 148

原创 C语言一些操作空间的库函数

实现起来并不难,和之前qsort函数的实现有点相同。思想和qsort函数设计的一样,不懂可以看看之前的qsotr函数的文章。比较两个地址的大小,当起始空间大于目的空间时,我们采取从后向前复制,防止再复制时其实空间后面的内容被覆盖,从而改变复制结果。返回值是新空间的地址,第一个参数是指向用于存储复制内容的目标数组,第二个参数指向要复制的数据源,第三个参数是要复制的字节数。memcpy函数在当起始空间和目的地空间重叠时并不能保证复制过程不被干扰。memcpy函数的作用是将一段空间内的内容复制到另一段空间内。

2023-03-19 12:00:00 85

原创 C语言一些字符串函数

strlen函数被包含在<string.h>头文件内,是用来计算字符长度的库函数。返回值时size_t是因为长度不会是负数,参数加const是因为我们只是要计算长度,并不去改变地址内的内容。作用原理是将字符串首元素的地址传给strlen,strlen函数则从此地址开始向后读,直到遇到'\0'停下,并返回读取到的字符的个数。strlen函数返回的结果是不计算'\0'在内的字符个数。相信对第一个结果没有问题,但第二个结果为什么是5?

2023-03-18 23:45:00 80

原创 C语言指针进阶

字符指针有两种表示方法但这两种表示方法有所差异,接下来看一段代码这段代码的结果是看到第二个结果我们会感到诧异。其实第二种方法是指向了字符串常量的地址。在内存中有一段空间存放了hello world这段常量字符串,str3和str4都指向了这块空间,所以它们存储的地址相同。由于这两个指针指向的是一个常量字符串,常量是不能被修改的。所以不能通过这个指针解引用来改变这个字符串。

2023-03-18 01:00:00 52

原创 C语言qsort函数

设计这个函数时,函数的返回类型是int,两个参数都是void*类型的地址,在使用使用这两个地址时,需要进行强制类型转换,因为void*类型的是无法直接使用的,用const修饰是因为我们只是两个地址的两个元素,并不改变,使函数的安全性变高。冒泡排序就是将第一个元素与第二个元素比较,当前面的元素小于后面的元素是时,就将它们两个交换,然后重复上面的操作,将第二个元素与第三个元素比较。第一个参数是排序的起始位置,第二个是需要排序的元素个数,第三个是元素的字节长度,第四个是用来判断大小的函数。也可以用来排序结构体。

2023-03-17 20:34:35 156

原创 C语言数据的存储读取

在C语言中,有一些基本类型,如int,float,double,char等,它们还分为有符号类型和无符号类型(unsigned int就是无符号整型),它们所能存储的数据范围不同。当然它们的存储方式也有所差异,接下来我们来了解一下它们的存储方式。以下所讲都是以VS2022,X86环境下为例。首先数据都分为有符号和无符号两种类型,以int类型为例,分为int(有符号),umsigned int(无符号),一个int类型的数据占用4个字节的空间,也就是32个bit。

2023-03-17 01:00:00 723

原创 C语言三步翻转法

然后写一个翻转函数revolve,revolve的参数设为两个char*的地址,使用指针来交换字符。后面的if语句用来判断*p指向的是不是空格,如果是则跳过此空格,如果是'\0',则不跳过,因为循环是用*p来决定是否继续循环,如果跳过了'\0'可能会有问题发生。首先我们需要将整个字符串先翻转一边,但这样字符串里面的单词的顺序也就改变了,所以之后我们需要将翻转后的字符串进行局部翻转。接下来就是将这个单词的首字母地址和末尾地址传给revolve,将单词翻转过来。最后打印出翻转后的字符串就行。

2023-03-12 03:30:00 268

原创 C语言扫雷小游戏

但当选择的坐标位于棋盘边缘时,我们计算就比较麻烦,为了使代码变得更简单,我们选择的数组需要比棋盘的长宽都大2,左右上下都多加一行。但一个数组不能即放置字符"#"又放置字符"1",所以我们用两个相同的数组,一个放置雷,一个当作棋盘,给玩家提供各种信息。这样雷的位置就摆放好了。写下来就是玩家选择需要排除的位置,判断这个位置是否有雷,或周围有几颗雷,如果周围没有雷,那么就像外延展开。初始化之后,我们需要放置雷,雷需要随机放置,这和三子棋的电脑下棋类似,生成一个随机数,将这个随机数与ROL和LIN取余然后加一。

2023-02-06 21:05:30 47

原创 C语言简单三子棋

其中test.c写游戏的基本逻辑,game.c写游戏的具体实现代码,game.h写游戏的函数声明等。之后我们就可以来实现三子棋的具体代码。三子棋基本过程是,玩家下棋,然后电脑下棋,在每下一步棋后都要检查棋局情况,来决定下一步。简单学习了C语言后,写一个简单的三子棋能让我们回顾之前的知识点,也能锻炼我们写一些大代码的能力。首先要玩三子棋我们需要一个棋盘,这个棋盘还需要能存放棋子,那我们就可以用二维数组来代替棋盘。写一个三子棋的代码数量比较多,所以为了方便检查代码,我们需要用三个文件来完成三子棋。

2023-02-06 15:39:34 36

原创 初识C语言

定义常量:#define MAX 1000此代码将MAX定义为一个常量,其值为1000。定义宏:#define ADD(x,y) ((x)+(y))宏和函数有些相似,但宏在代码执行时,会将ADD(x,y)替换为((x)+(y)),和函数有相似功能,但并不能代替函数。

2023-02-04 20:18:17 78 1

原创 初识C语言(常量,字符串,转义字符,if,while语句)

在上面的代码中,NUMBER就是被#define定义的常量,此时用printf函数打印NUMBER的值就能看到,打印出来的是5.在用#define定义常量时,常量名一般全是大写字母,且放在头文件之后。

2022-12-11 16:51:33 216 1

原创 初始C语言(数据类型,变量)

这些数据类型意义是为了在程序中创建变量来储存数据,并用来进行计算或使用。如:创建一个ing型变量num并给num赋值int main(){return 0;}这样num就被赋值为10。其他类型变量的创建类似。都是:数据类型+变量名=xx。当然也有些差异。}在定义char型变量时,要用' '引起,且只能有一个字符。float最后加一个f是因为编译器会自动认为小数是double类型的,加一个f可以转换为float类型。

2022-12-09 23:29:38 54

原创 第一篇博客

个人介绍我现在在江西的一个一本学校就读,专业为计算机科学与技术。学校是主要开设农林类专业,对计算机专业不太重视。所以学习方面得多靠自己。学习情况计算机编程入门是C语言,目前水平也是入门菜鸟,正在努力学习。对于今后学习C语言,我想一周拿出3天,每天4小时来学习。希望以后能一直坚持下去,学完C语言后,学习其他知识也要坚持拿出大量时间来学习。学完C语言,再学习Java,操作系统等。未来期望说实话,对于以后就业、工作方面还是比较迷茫的。不太清楚工作内容。对于前端、后端之类的也不太了解。所以对于公

2022-12-02 14:35:23 491 1

空空如也

空空如也

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

TA关注的人

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