C语言
文章平均质量分 58
介绍C语言的一些特性和相关的知识点
白的夜gxw
前端开发程序员
展开
-
C语言:学生管理系统(链表版)
这是一个小型的管理系统,使用链表进行实现,好了废话不多说,直接上代码,有需要的同学自取。运行的开发环境是vscode.原创 2022-08-03 11:48:15 · 2256 阅读 · 0 评论 -
C语言:链表
代码】C语言:链表。原创 2022-08-02 21:31:52 · 229 阅读 · 0 评论 -
C语言:浅谈各种复杂的声明
根据优先级,oof先与【3】结合,说明这是一个数组,再与【4】结合说明这是一个数组的数组,也就是二维数组,再与星号结合,说明二维数组中的每个元素都是指针变量。根据优先级,uof先和【3】结合,说明这是一个数组,再和星号结合,说明数组中的元素是指针变量,再和【4】结合,说明其中每个指针都指向一个内含4个int类。根据优先级,uuf先与星号结合,说明这是一个指针,再与【3】结合,说明这是一个指向数组的指针,再与【4】结合,说明只这是一个指向一个二维数组的指针。我们先来了解一下复杂的声明的一些符号。...原创 2022-07-27 20:50:14 · 526 阅读 · 1 评论 -
C语言:typedef知识点总结
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。他和#define容易混淆。1.与#define不同,typedef创建的符号名只受限于类型,不能用于值。3.在其受限范围内,typedef比#define更加的灵活。2.typedef由编译器解释,不是预处理器。...原创 2022-07-27 20:11:33 · 476 阅读 · 0 评论 -
C语言:枚举知识点总结
使用enum关键字,可以创建一个新类型并指定他可具有的值(实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型)。从技术层面看,red,blue等这些枚举符都是int类型的常量。在声明数组时,可以用枚举常量表示数组的大小,在switch语句中可以用枚举常量作为标签。如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值。那么cat的值是0,lmj的值是100,jijia的值是101,lop的值是102.在枚举的声明中,可以为枚举常量指定整数值。..原创 2022-07-27 19:59:12 · 310 阅读 · 0 评论 -
C语言:联合体知识点总结
如果运行这段代码大家就会发现出现了奇奇怪怪的现象,虽然给每个成员都赋值,但是打印却没有打印出来,这就是联合体的特点,每次只能存储一个类型,存储下一个类型时上一个类型会被消除。他们的结构只是最后的职业不同,其他的都一样,如果类似的模板非常多,难道我们每一个都需要创建一个吗?但是声明的联合只能存储一个int类型的值或者是一个double类型的值亦或者是一个char类型的值。下面的代码帮助大家理解。请你完成这个需求,要求可以存放老师的信息(姓名,年龄,性别,教的科目),还有学生的信息(姓名,年龄,性别,班级)。.原创 2022-07-27 19:49:51 · 216 阅读 · 0 评论 -
C语言:结构体简单语法总结
定位到prime结构变量开始的位置,并把结构中的所有字节都拷贝到与pbook相关的文件中。在这种系统中,结构的内部就存在没使用的缝隙。这样,该函数便创建了一个结构变量dick,该变量的结构布局是book.值得一提的是,结构的标记名是可选的。结构的缺点传递结构浪费时间和存储空间尤其是把大型结构传递给函数,而只使用结构中的一俩个成员特别浪费。指针的缺点无法保护数据,被调函数中的某些操作可能会意外的影响原来结构的操作。和数组不同的是,结构变量名并不是结构变量的地址,因此要在结构变量名的前面加上一个&运算符。...原创 2022-07-27 18:35:24 · 551 阅读 · 0 评论 -
C语言:fflush()的用法以及缓冲区的概念
fflush()函数的原型如下:主要用到这俩个部分:fflush(stdio):清空输入缓冲区fflush(stdout):清空输出缓冲区1、什么是缓冲区?缓冲区就是我们常说的缓存,属于内存的一部分。它依据对应的输入设备和输出设备把内存的一部分空间分为输入缓冲区和输出缓冲区2、为什么会有缓冲区?一句话:减少对磁盘的读写次数,提高计算机的运行效率。系统调用时需要时间的,程序中频繁的使用系统调用会降低程序的运行效率 ,库函数访问文件的时候根据需要,设置不同类型的缓冲区,从而减少了直接调用IO系统调用的次数,也原创 2022-07-03 17:22:29 · 8549 阅读 · 3 评论 -
C语言中的文件I/O函数有哪些?
本文主要对操作文件所用到的函数做一个比较详细的总结和分析,大体罗列了所有关于文件的相关函数。模式字符串含义“r”以读模式打开文件“w”以写模式打开文件,把现有文件长度截为0,如果文件不存在,则创建一个新文件“a”以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件“r+”以更新模式打开文件(可读可写)“w+”以更新模式打开文件(可读可写),把现有文件长度截为0,如果文件不存在,则创建一个新文件“a+”以更新模式打开文件(可原创 2022-07-03 16:55:30 · 471 阅读 · 0 评论 -
C语言:文件的概念
概念C程序把输入看做是字节流,输入流来来源于文件,输入设备(键盘),或者甚至是另一个程序的输出。类似的,C程序把输出也看做是字节流,输出流的目的地可以是文件、视频显示…文件文件通常是在磁盘或固态硬盘上的一段已命名的存储区。C把文件看做是一系列连续的字节,每个字节都可以被单独读取。c提供俩种文件模式,文本模式和二进制模式。文本模式和二进制模式所有文件的内容都以二进制形式(0或1)存储。但是如果文件最初使用二进制编码的字符表示文本,该文件就是文本文件,其中包含文本内容。如果文件中的二进制代表机器语言代码或者是数原创 2022-07-03 16:36:03 · 416 阅读 · 0 评论 -
C语言中的类型限定符有哪些?
C语言中有一些关键字起到了限定的作用,他们被称为限定符,那么在C语言中共有几个限定符呢?他们的作用分别是什么呢?本文主要介绍C中4个限定符ANSI C类型限定符我们通常使用数据类型和存储类别来描述一个变量。C90还新增了俩个属性:恒常性和易变性。这俩个属性可以分别用关键字const和volatile来声明,以这俩个关键字创建的类型是限定类型。C99新增了第三个限定符:restrict,用于提高编译器优化。C11标准新增了第四个限定符:_Atomic.C11提供一个可选库,由stdatomic.h管理原创 2022-07-03 16:29:01 · 1442 阅读 · 0 评论 -
C语言中的malloc()和free()
分配内存:malloc() 和 free()回忆一下,静态数据在程序载入内存时分配,而自动数据在程序运行块时分配内存,并在程序离开块时销毁。c能做的不止于此,可以在程序运行的时候分配更多的内存,主要的工具是**malloc()**函数。该函数接受一个参数:所需的内存字节数。以上代码为30个double类型的值请求内存空间,并设置ptd指向该位置。现在,我们有三种创建数组的方法使用第二种和第三种方法可以创建动态数组。这种数组和普通数组不同,可以在程序运行时选择数组的大小和分配内存。例如:ptd = (d原创 2022-07-03 15:57:51 · 973 阅读 · 0 评论 -
C语言中的伪随机数rand()和真随机数srand()
随机数函数rand()函数rand()其实是一个伪随机数生成器,为什呢?不难看出,每次调用函数rand(),他的初始化种子都是从1 开始。这就说明虽然他得到的数是随机的,但是关闭程序再次运行得到的随机数又都是一样的。这可真糟糕!如何做到真真的随机呢?不难看出,只需要每次运行程序的时候把种子变一下,不让他从1开始,就达到了随机的效果。。。。有一个方法,可以每次都随机种子,她就是srand((unsigned int)tine(0));一般而言,time()函数接受的参数是一个time_t类型对象的地址,原创 2022-07-01 23:47:56 · 883 阅读 · 3 评论 -
c语言的5中存储类别
5中存储类别自动变量原创 2022-06-29 23:45:58 · 528 阅读 · 0 评论 -
C语言 const关键字
本文主要介绍C语言中关键字const的用法以及作用,希望能够帮助到大家原创 2022-06-14 01:25:16 · 278 阅读 · 1 评论 -
ctype.h系列的字符函数
c有一系列专门处理字符的函数,ctype.h头文件包含了这些函数的原型,这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值,否者返回0. ctype.h头文件中的字符测试函数ctype.h头文件中的字符映射函数......原创 2022-06-25 21:43:24 · 273 阅读 · 0 评论 -
程序员写代码也存在本手、妙手、俗手
2022年的高考已经结束,准大一的学子们今天起你们不用去深究何是“本手”何是“俗手”,放松起来去疯狂地玩吧! 但是从程序猿写代码的角度来分析我认为程序猿写代码也有本手、俗手之分。............原创 2022-06-14 11:45:55 · 413 阅读 · 0 评论 -
C语言有哪些关键字
其中没有注释的是最初K&R C标准给出的,(C90)后缀是C90标准添加的关键字,(C99)后缀是C99标准添加的关键字,(C11)后缀是C11标准添加的关键字。这里对K&R C标准,以及C90,C99,C11做一个简单的介绍。1.C语言发展之除并没有任何标准,直到出现了K&R C(经典C标准),但是只定义了C语言,没有定义C库。2.美国国家标准协会(ANSI)与1983组建了一个委员会,开发了一套新的标准,与1989年正式发布。该标准(ANSI C)定义了C语言和C标椎库,国际标椎化组织于1990原创 2022-06-25 19:46:34 · 173 阅读 · 0 评论 -
关于limits.h和float.h头文件的介绍
关于明示常量的头文件c头文件limits.h和float.h分别提供了整数类型和浮点类型大小限制相关的详细信息。每个头文件都定义了一系列供实现使用的明示常量。 limits.h中的一些明示常量 float.h中的一些明示变量...原创 2022-06-23 17:44:52 · 373 阅读 · 0 评论 -
double和 float 有啥区别
哈哈,这个问题好像挺不值一提的,但是对于刚学c语言的小伙伴来说,关于这个概念可能并不是很清楚书本告诉我们:float:单精度类型 (可保留最少6位有效数字)double:双精度类型 (可保留最少10位有效数字)可是真的是这样吗?啊?都一样啊,都是保留小数点后六位。别着急,我们继续测试…相信到这里大家就清楚了,有效位数是从左边起第一个不为0 的数字算起,通过测试我们也不难发现,对于float类型他的有效位数是9位,double 类型的有效位数是12位,嗯?怎么和书本说的不一样呢?注意,书本说的是最原创 2022-06-25 20:15:19 · 632 阅读 · 0 评论 -
C语言有哪些处理字符串的函数?
c库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中。用于统计字符串的长度函数接受俩个字符串作为参数,该函数把第二个字符串的备份附加到第一个字符串,重新构成第一个字符串第二个字符串不变strcat()函数的升级版,因为不能检测第一个数组能不能装下第二个数组,万一溢出就比较糟糕。strncat的第三个参数指定了最大添加字符数,保证了内存空间的安全字符串内容比较,相同则返回0,不相同则返回非0值(第一个大于第二个返回正数,第一个小于第二个返回负数),值得一提的是该函数比较的是原创 2022-06-23 17:14:53 · 113 阅读 · 0 评论 -
C语言的输入输出函数大总结
不幸的gets()函数gets函数读取整行输入,直至遇到换行符,然后丢弃换行符。缺点:只有一个参数,无法检查数组是否装的下行,如果输入的字符串过长,会导致缓冲区溢出,及多余的字符超出了指定的目标空间。如果这些多余的字符只是占用了尚未使用的空间,那么无伤大雅。但是如果擦除到程序中其他的数据,程序就会中断。C99保留了gets()函数,但是建议人们不要使用,C11从标椎中废除了gets()函数。gets()的替代品C11标椎新增的gets_s()函数也可以替代gets().他可以替换现有代码中的gets().但原创 2022-06-23 17:22:01 · 629 阅读 · 0 评论 -
多级指针怎么用?
其实也没有那么恐怖了,把握好本质,多多思考和练习你就发现其实他一点也不神秘,还挺有意思,挺好用的。拿二级指针来说,一级指针存放的是普通变量的地址,比如 int a=10,int * p = & a;二级指针存放的也是地址,只不过是指针变量的地址,比如 int ** pp = & p; pp存放的是指针变量p的地址,那么* pp就是变量p的值,p的值是什么?就是变量a的地址,* * p又是什么呢?* * p就是指针变量p的值的值。有点绕?展开来说一下,先说变量p 的值是什么?是变量a的地址。那变量a的地址原创 2022-06-20 19:50:28 · 149 阅读 · 0 评论 -
数组指针和指针数组到底有啥区别?
教大家一个方法,不管他的名字有多复杂,看最后俩个字就可以,比如说指针数组,最后俩个字是数组,这就说明他的本质就是数组,前面的词语都是修饰词。比如在指针数组中,指针是修饰词,只是想告诉我们首先这是一个数组,其次数组中的元素是指针,仅此而已。表现形式是int *p[4];根据运算符的优先级,P先和【4】结合,于是p【4】组成了一个4和元素的数组,然后在和*结合,说明了数组中的4个元素都是地址,也就是指针啦。给大家举个例子,函数指针数组这是个什么东东啊?通过前面的方法,我们只看后俩个字,前面的都是修饰词,后俩个字原创 2022-06-20 00:02:50 · 107 阅读 · 0 评论 -
C语言:goto语句
我们先来对goto语句做一个简单的了解goto语句有俩部分:goto语句 + 标签名goto语句作用:1.跳出多重循环(break,continue只能跳出本次循环;2.使用goto语句可以进行错误处理;接下来依次用代码来演示1.跳出多重循环当然这里如果不使用goto语句,也可以使用return 0;或者exit(0)来结束函数也是可以的。2.进行错误处理这应该是goto语句最有用的部分(个人感觉),拿上面的代码举例(socket通信代码的一部分),我们在写代码的时候肯定希望我们的代码没有任何错误,可原创 2022-06-25 22:14:26 · 914 阅读 · 0 评论 -
main函数为什么会带参数?
int main( int argc , char * argv[] );argc—argument count;argv—argument value;C编译器允许main()没有参数或者有俩个参数。main函数有俩个参数时,第一个参数时命令行中字符串的数量。第二个参数将字符串的地址存放在指针数组中,习惯将数组首元素存放程序名,之后依次存放。demo:......原创 2022-06-23 17:09:33 · 387 阅读 · 0 评论 -
函数指针和指针函数的区别
上期我们讨论了数组指针和指针数组的区别,那么这期我们来说一下指针函数和函数指针的区别。根据我们上期数组指针和指针数组中提到的方法,我们只需要看他的最后俩个字,就可以看清他的本质。那么指针函数的本质就是函数,前面的修饰词告诉我们这不是一个普通的函数,他的返回值是一个指针。表达式:int ( * pointer) (int ,int)他有什么用呢?直接上例子有a个学生,每个学生有b门课程的成绩,要求在输入学生的学号之后,能输出该学生的全部成绩总结:首先指针函数,就是一个函数,既然是函数那么就有参数和返回值原创 2022-06-20 13:58:10 · 672 阅读 · 1 评论 -
关于字符串的那些事
字符串字面量1.用双引号括起来的内容称为字符串字面量,也叫做字符串常量。从ANSI C标准起,如果字符串字面量之间没有间隔,C会将其视为串联起来的字符串字面量。2.字符串常量属于静态存储类别,这说明如果在函数中使用字符串常量,该字符串只会存储一次,在整个程序的生命周期内存在。用双引号括起来的内容被视为指向该字符串存储位置的指针。这有点类似于把数组名作为指向该数组位置的指针。你真的了解字符串?可以自己先大胆猜测一下,结果是什么?很有意思的解析:printf()根据%s转换说明打印we,根据%p转换说明打印原创 2022-06-23 17:38:12 · 151 阅读 · 0 评论 -
如何把字符串转换为整数型数据
atoi()函数字符转换为int型的数据,返回值为int型字符转换为double型的数据,返回值为double型字符转换为long型的数据,返回值为long型字符转换为long型数据缺点:没有上面三个好用,因为有三个参数(char * , char * * ,int )优点:可以检测首字符是不是数字字符,不是则直接退出,效率高,其次可以指定输入数字的进制字符型转换为unsigned long 类型的数据字符型转换为 double 类型的数据把数字转换为字符串itoa()函数 itoa(int原创 2022-06-23 16:58:08 · 525 阅读 · 0 评论