C语言
文章平均质量分 73
New_Teen
一个普通的在读大学生,平平无奇的外貌下有着不平凡的心,一颗恒心,千里之行,始于足下,欢迎大家一起学习交流,加油
展开
-
简易C语言声明解析器(cdecl)——C语言实现
本文介绍了用C语言实现简单C声明解析器(cdecl)。原创 2023-12-15 19:36:56 · 566 阅读 · 0 评论 -
C语言运算符优先级&结合性速查表
C语言中的运算符有不同的优先级和结合性,这些属性决定了表达式中运算符的计算顺序。 本文提供了其速查表。原创 2023-12-10 16:45:16 · 698 阅读 · 0 评论 -
ASCII字符集介绍&速查表
每个字符都与一个唯一的数字(0到127)相关联,这个数字称为ASCII码。例如,大写字母A的ASCII码是65,小写字母a的ASCII码是97。是一种基于拉丁字母的字符编码集,用于将文本字符和控制字符与数字进行映射。ASCII字符集包含128个字符,分为7个比特(bit)表示一个字符。原创 2023-12-10 16:35:49 · 1348 阅读 · 0 评论 -
C现代方法(第28章)笔记——C1X新增的多线程和原子操作支持
本文我们先学习如何使用C语言创建线程(28.1.2节),然后讨论因多线程而引发的数据竞争问题(28.1.3节),并由此引出原子类型和原子操作(28.2节)。即使是引入了原子操作,也不能完全解决数据访问的同步问题,为此还将学习如何用内存屏障技术来同步线程间的内存访问(28.2.8节)。原创 2023-12-10 16:12:18 · 481 阅读 · 0 评论 -
C现代方法(第27章)笔记——C99对数学计算的新增支持
本文介绍C99新增的5个标准头。 先是整数类型相关的头。声明了具有指定位数的整数类型。提供了可读写型值的宏。 之后两节描述了C99对复数的支持(复数的概念、C99中的复数类型、——提供了对复数进行数学运算的函数)。 最后是跟浮点类型有关。提供了泛型宏,使得调用和中的函数更方便。中的函数允许程序访问浮点状态标志和控制模式。原创 2023-12-10 15:35:04 · 456 阅读 · 0 评论 -
C现代方法(第26章)笔记——<stdarg.h>、<stdlib.h>和<time.h>标准库
本文介绍了三个标准库:头(26.1节)可使编写的函数带有可变数量的参数,头(26.2节)是一类不适合放在其他库中的函数(包括数值转换函数、伪随机序列生成函数、内存管理函数、与外部环境通信的函数、搜索和排序工具、整数算术运算函数、多字节/宽字符转换函数、多字节/宽字符串转换函数),头(26.3节)允许程序处理日期和时间。原创 2023-12-08 21:18:25 · 379 阅读 · 0 评论 -
C现代方法(第25章)笔记——国际化特性
提供了允许程序员针对特定的“地区”(国家或特定语种地理区域)调整程序行为的函数。多字节字符和宽字符使程序可以工作在更大的字符集上,例如亚洲国家的字符集。通过双联符、三联符和可以在一些不支持某些C语言编程中常用字符的机器上编程。通用字符名允许程序员把通用字符集中的字符嵌入代码中。提供了用于宽字符输入/输出以及宽字符串操作的函数。提供了宽字符分类函数和大小写映射函数。最后,提供了Unicode字符处理函数原创 2023-12-08 20:28:26 · 330 阅读 · 0 评论 -
C现代方法(第24章)笔记——错误处理
本文讲述两种在程序中检测错误的方法:调用assert宏和测试errno变量。24.1节介绍了头,里面定义了assert宏;24.2节讨论了头,其中定义了errno变量,还有perror函数(原创 2023-11-30 22:23:16 · 338 阅读 · 0 评论 -
C现代方法(第23章)笔记——库对数值和字符数据的支持
本文会介绍C语言中5个函数库的头,这5个头提供了对数值、字符和字符串的支持。和头,它们包含了用于描述数值和字符类型特性的宏,属于数据池;头,它提供了数学函数(分C89和C99两个版本讨论);和头,这两个头分别提供了字符函数和字符串函数。原创 2023-11-24 22:30:58 · 538 阅读 · 0 评论 -
C现代方法(第22章)笔记——输入/输出
本文将首先讨论一些基本问题:流的概念、FILE类型、输入和输出重定向,以及文本文件和二进制文件的差异。随后将讨论特别为使用文件而设计的函数,包括打开和关闭文件的函数。讨论完printf函数、scanf函数以及与“格式化”输入/输出相关函数后,将着眼于读/写非格式化数据的函数。 随后,22.7节会说明如何对文件执行随机的访问操作。最后,22.8节会描述sprintf函数、snprintf函数和sscanf函数,后两者分别用于写/读字符串。原创 2023-11-23 21:51:59 · 515 阅读 · 0 评论 -
C现代方法(第21章)笔记——标准库
本文主要对C语言中的标准库做简要概括,21.1节列举使用库的一些通用的指导原则,并介绍了会在一些库的头中发现的技巧:使用宏来“隐藏”函数。21.2节会对C89库的每个头分别做概述性介绍,21.3节对C99库的新头做概述性介绍,21.4节会对C11库的新头做概括性介绍。原创 2023-11-20 21:26:13 · 212 阅读 · 0 评论 -
C现代方法(第20章)笔记——底层程序设计
本文主要介绍了C语言在底层程序中的应用,20.1节介绍C语言的位运算符。位运算符提供了对单个位或位域的方便访问。20.2节介绍如何声明包含位域的结构。最后,20.3节描述如何使用一些普通的C语言特性(类型定义、联合和指针)来帮助编写底层程序。原创 2023-11-14 22:27:50 · 291 阅读 · 0 评论 -
C现代方法(第19章)笔记——程序设计
本文简要地涵盖了一些在程序设计中比较重要的观念,并展示如何使用它们来编写出易读、易于维护的C程序。分别讨论如何将C程序看作一组相互提供服务的模块。随后会介绍如何使用信息隐藏(19.2节)和抽象数据类型(19.3节)来改进程序模块。19.4节通过一个示例(栈数据类型)展示了如何在C语言中定义和实现抽象数据类型。19.5节描述了C语言在定义抽象数据类型方面的一些局限,并讨论了解决方案。原创 2023-11-09 22:11:56 · 608 阅读 · 0 评论 -
float单精度浮点数如何在计算机中存储
本文是博主对float型数据如何在计算机中存储的理解,从float型数据的组成、实际举例以及代码测试三个方面来介绍,希望可以帮助各位更好地理解float型数据,谢谢大家!原创 2023-11-07 11:06:06 · 268 阅读 · 0 评论 -
C现代方法(第18章)笔记——声明
本文介绍的是C语言中的声明,指的是程序中告诉编译器有关变量、函数和其他标识符的信息的语句。声明用于定义标识符的类型和名称,以便在程序中使用它们。原创 2023-11-05 15:23:04 · 359 阅读 · 0 评论 -
C现代方法(第17章)笔记——指针的高级应用
本文介绍的是一些指针的高级应用,指针是C语言的重点和难点,掌握更高级的指针用法可以进一步加深对C语言的认识。不管是刚学C语言的小白,还是C语言大佬,希望本文可以帮到各位,感谢!原创 2023-11-03 23:11:50 · 371 阅读 · 2 评论 -
C语言实现俄罗斯方块游戏
本文介绍的是我空闲时间用C语言写的一个俄罗斯方块游戏,整个程序只有一个文件,实现了基本的游戏功能,但还是有些缺陷,希望有心之士能够继续完善,感谢各位!原创 2023-11-02 20:31:54 · 226 阅读 · 0 评论 -
C现代方法(第16章)笔记——结构、联合和枚举
本文章主要介绍C语言中的结构、联合以及枚举,从定义、惯用法、应用场景等多个角度详细解析,干货满满,期待各位大佬的阅读,希望能帮到各位,感谢!原创 2023-11-01 20:49:31 · 718 阅读 · 0 评论 -
C现代方法(第15章)笔记——编写大型程序
本文章主要内容为如何合理地用C语言编写大型程序,介绍了源文件、头文件、如何把程序划分为多个文件以及如何构建多文件程序,希望能对大家有所帮助。原创 2023-10-30 22:40:13 · 260 阅读 · 0 评论 -
C现代方法(第14章)笔记——预处理器
预处理器是一种用于编程和软件开发的工具,它用于在源代码被编译或解释之前对源代码进行一系列的自动化处理和转换操作。预处理器的主要目的是扩展编程语言的功能,简化代码编写,以及实现代码的可移植性和重用性。常见的预处理器指令包括宏定义、条件编译、包含其他文件等,它们可以在编译或解释阶段执行,将对应的指令替换成实际的代码,从而影响程序的行为和结构。在C、C++、和许多其他编程语言中,预处理器是代码编译过程中的重要组成部分,用于优化和定制代码以满足特定需求。原创 2023-10-28 22:35:30 · 509 阅读 · 0 评论 -
C现代方法(第13章)笔记——字符串
C语言的字符串是一系列字符的集合,以null字符('\0')结尾。字符串可以用字符数组来表示,且在C中经常用于存储和处理文本信息。字符串可以通过字符数组的方式来创建和操作,支持多种字符串处理函数,例如拷贝、连接和比较等操作。字符串在C语言中是常见的数据类型,用于处理文本和字符数据。原创 2023-10-24 19:45:11 · 325 阅读 · 0 评论 -
C现代方法(第12章)笔记——指针和数组
C语言中,指针和数组之间有密切的关系。数组名可以被视为指向数组第一个元素的指针,而使用指针可以方便地访问数组的元素。指针可以通过递增和递减来遍历数组的元素,因此,指针和数组可以互相转换,使得在C语言中,指针和数组操作经常是交替使用的。这种关系使得C语言能够高效地处理数组数据和进行各种操作,包括遍历、排序和修改数组中的元素。原创 2023-10-23 21:36:27 · 477 阅读 · 0 评论 -
C现代方法(第11章)笔记——指针
C语言的指针是一种变量类型,用于存储其他变量的内存地址。指针允许程序直接访问和操作内存中的数据,使其成为高效的内存管理工具。通过指针,可以实现动态内存分配、数据传递、数组操作和函数调用等各种重要功能。指针的使用需要谨慎,因为错误的指针操作可能导致内存泄漏或程序崩溃,但它也赋予程序员更大的灵活性和控制权。原创 2023-10-21 23:06:47 · 586 阅读 · 0 评论 -
C现代方法(第10章)笔记——程序结构
本文介绍的是C语言程序的结构组成,是博主阅读《C语言程序设计:现代方法(第2版·修订版)》时所作笔记,日后会持续更新后续章节笔记。欢迎各位大佬阅读学习,如有疑问请及时联系指正,希望对各位有所帮助,Thank you very much!原创 2023-10-20 21:52:53 · 531 阅读 · 0 评论 -
C现代方法(第9章)笔记——函数
本文介绍的内容是C语言中的函数的定义和使用原创 2023-10-19 23:01:12 · 1450 阅读 · 1 评论 -
C现代方法(第8章)笔记——数组
C语言的数组是一种用于存储多个相同类型的数据元素的数据结构。它们是一种非常基本且重要的数据类型,用于在程序中组织和管理数据。原创 2023-10-17 19:35:58 · 358 阅读 · 2 评论 -
C现代方法(第7章)笔记——基本类型
C语言的基本数据类型包括整数类型、浮点数类型、字符类型和空类型。此外,C语言还支持限定符,如signed和unsigned,用于指定整数类型的有符号或无符号属性。例如,unsigned int表示无符号整数。这些基本数据类型为C语言提供了灵活性和效率。原创 2023-10-15 15:32:07 · 520 阅读 · 1 评论 -
C现代方法(第1&2章)笔记——概述、基本概念
C语言是一种通用编程语言,由Dennis Ritchie在1972年开发。它以简洁、高效、可移植性强而闻名,广泛用于系统编程、嵌入式系统和应用程序开发。C语言具有强大的控制结构和广泛的标准库,适合开发各种类型的软件。原创 2023-10-10 21:03:13 · 382 阅读 · 0 评论 -
C现代方法(第5&6章)笔记——选择语句、循环
本文是作者阅读《C语言程序设计:现代方法(第2版·修订版)》时所做笔记,日后会持续更新后续章节笔记。欢迎各位大佬批评指正,希望对诸位有所帮助,Thank you very much!原创 2023-10-07 08:57:37 · 345 阅读 · 0 评论 -
C现代方法(第3&4章)笔记——格式化输入输出、表达式
本文是作者阅读《C语言程序设计:现代方法(第2版·修订版)》时所做笔记,也是第一篇书籍笔记文章,日后会推出后续章节笔记。欢迎各位兄弟姐妹阅读,大家一起学习,共同进步!原创 2023-09-16 09:29:45 · 734 阅读 · 0 评论 -
队列——C语言(链表)
用链表来写队列真的比数组简单得多,本人已经发了用数组实现队列的文章,欢迎大家阅览1.先写一个队列的接口(queue.h)/*一个队列模块的接口*/#include <stdlib.h>#define QUEUE_TYPE int /*队列元素的类型*//*** create_queue** 创建一个队列,参数为队列可以存储元素的最大数量** 这个函数只适用于动态分配数组的队列版本*/void create_queue(size_t size);/*** d原创 2022-05-21 23:12:32 · 727 阅读 · 0 评论 -
队列——C语言(动态数组)
接下来我将用malloc函数实现队列的动态数组版本提示:malloc函数是C语言中分配内存空间的函数1.首先,按照惯例,先写一个队列的接口(queue.h)/*一个队列模块的接口*/#include <stdlib.h>#define QUEUE_TYPE int /*队列元素的类型*//*** create_queue** 创建一个队列,参数为队列可以存储元素的最大数量** 这个函数只适用于动态分配数组的队列版本*/void create_queue(si原创 2022-05-21 22:59:53 · 465 阅读 · 0 评论 -
队列——C语言实现(静态数组)
队列是一种先进先出的数据结构下面将展示我用普通的静态数组实现的队列1.首先先写一个队列的接口(queue.h)/*一个队列模块的接口*/#include <stdlib.h>#define QUEUE_TYPE int /*队列元素的类型*//*** create_queue** 创建一个队列,参数为队列可以存储元素的最大数量** 这个函数只适用于动态分配数组的队列版本*/void create_queue(size_t size);/*** destroy_原创 2022-05-21 22:44:48 · 1147 阅读 · 0 评论 -
函数指针——C语言
int f(float, float);提问1:这个 f 是个什么东西?解析:在C语言中,这是声明了一个形参数据类型为(float, float),返回值类型为int的 f 函数。int *f(int, int);提问2:这个 f 又是什么东西?解析:在C语言中,这是声明了一个形参数据类型为(int, int),返回值类型为int型指针的 f 函数。int (*f)(int, int);提问3:这个 f 又是何方神圣?解析:别急,先从第一个括号开始分析,可以得出 f 是.原创 2022-05-11 20:19:44 · 554 阅读 · 0 评论 -
球与地下城——C语言游戏
游戏简介:这个游戏就是要让小球不断往下面探索,“A”左移,“D”右移。争取跳到方块上,如果小球碰到顶部或者没有踩到方块,游戏就会结束,随着时间推进,方块上升的速度会变快。游戏结束时会有结算画面,显示得分情况。提前准备:1.首先要安装好Visual Studio, EasyX图形库(可以去官网下载)2.VS要安装好C++模块3.创建C++空项目4.在头文件中新建fallball.h文件5.在源文件中新建fallball.cpp文件fallball.h如下所示:/***原创 2022-05-08 18:38:21 · 898 阅读 · 0 评论 -
双链表(插入&遍历)——C语言
所谓双链表,就是单链表的升级版,其中的结点,既有指向下一个结点的指针,又有指向前一个结点的指针。规定链表第一个结点的前指针为NULL,最后一个结点的尾指针为NULL。同时,双链表不仅有头指针,还有尾指针,头指针指向链表第一个结点,尾指针指向链表最后一个结点。因此,在有序双链表中插入新值时,要改变4个指针,首先考虑四种情况(空链表插入,链表头插入,链表中间插入,链表尾部插入)。遍历即可升序,也可降序。1.首先写一个定义双链表的接口(结点数据类型定义,函数声明)(dlink.h)/*** 定义一原创 2022-05-07 17:57:36 · 1759 阅读 · 1 评论 -
有序单链表插入——C语言
以下内容要求有一定指针和链表基础,请配合画图理解1.首先我们定义一个头文件(slink.h),用来声明链表的结点数据类型,以及相关函数/*** 定义一个有序单链表的操作接口*/#include <malloc.h> //动态分配内存声明文件#include <assert.h> //断言函数声明文件#include <stdio.h> //标准输入输出声明文件#define LINK_TYPE int //链表存储数据类型/*** 定义结点数原创 2022-05-07 06:00:00 · 3643 阅读 · 0 评论 -
躲避方块的球——C语言游戏
1.安装好Visual Studio, EasyX图形库。(都可以去官网下载)2.在VS中创建新的空项目(确保VS已经安装好C++模块)3.在头文件中新建touch.h文件。/*** "别碰方块"游戏对象相关数据(游戏窗口,小球,方块,得分)*/#pragma once#include <graphics.h>#include <conio.h>#include <stdio.h>#define WIDTH 1000 //窗口宽度#defi原创 2022-05-06 13:46:50 · 1403 阅读 · 0 评论 -
弹来弹去球——C语言
1.首先安装好Visual Studio, EasyX图形库。2.打开VS,创建C++空项目。3.在到项目源文件文件夹里添加新项(.cpp源文件),用来写程序(ball.cpp)/*** 实现一个弹来弹去的球*/#include <graphics.h>#include <conio.h>#include <stdio.h>#define WIDTH 600 // 窗口宽#define HEIGHT 600 // 窗口高#define RA原创 2022-05-05 15:48:16 · 849 阅读 · 0 评论 -
堆栈——C语言(链表)
想必你已经看完了我写的堆栈的数组版本,接下来,就好好看看链表怎么实现堆栈吧1.首先定义一个堆栈接口(stack.h)/*** 一个堆栈模块的接口*/#include <stddef.h>#define STACK_TYPE int /*堆栈所储存的类型*//*** push** 把一个新值压入堆栈中,它的参数是被压入的值。*/void push(STACK_TYPE value);/*** pop** 从堆栈中弹出一个值,并将之返回*/STACK_TY原创 2022-05-04 22:59:11 · 1058 阅读 · 0 评论
分享