
C 语言系统学习
文章平均质量分 89
C 知识体系总结 从 0 到 100
赔罪
合作私聊 有偿解决计算机问题
展开
-
C 语言I/O 函数
C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。原创 2024-11-18 12:42:44 · 818 阅读 · 0 评论 -
C 语言预处理器(Preprocessor)
C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。预处理器首先会清理代码,进行删除注释、多行语句合成一个逻辑行等工作。然后,执行开头的预处理指令。本章介绍 C 语言的预处理指令。预处理指令可以出现在程序的任何地方,但是习惯上,往往放在代码的开头部分。每个预处理指令都以开头,放在一行的行首,指令前面可以有空白字符(比如空格或制表符)。和指令的其余部分之间也可以有空格,但是为了兼容老的编译器,一般不留空格。所有预处理指令都是一行的,除非在行尾使用反斜杠,将其折行。原创 2024-11-18 00:00:00 · 1251 阅读 · 0 评论 -
C 语言Enum 类型
但是,C 语言也允许为 ENUM 常量指定值,不过只能指定为整数,不能是其他类型。因此,任何可以使用整数的场合,都可以使用 Enum 常量。由于 Enum 的属性会自动声明为常量,所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。如果一种数据类型的取值只有少数几种可能,并且每种取值都有自己的含义,为了提高代码的可读性,可以将它们定义为 Enum 类型,中文名为枚举。注意,Enum 内部的常量名,遵守标识符的命名规范,但是通常都使用大写。Enum 常量可以是不连续的值。原创 2024-11-17 10:46:32 · 457 阅读 · 0 评论 -
C 语言Union 结构
它内部包含各种属性,但是所有属性共用一块内存,导致这些属性都是对同一个二进制数据的解读,其中往往只有一个属性的解读是有意义的。并且,后面写入的属性会覆盖前面的属性,这意味着同一块内存,可以先供某一个属性使用,然后再供另一个属性使用。Union 结构的好处,主要是节省空间。定义了三个属性,但同一时间只用到一个,使用 Union 结构就可以节省另外两个属性的空间。最后赋值的属性,往往就是可以取到有意义的值的那个属性。Union 结构指针与它的属性有关,当前正在按照哪个属性解读数据,它的指针就是对应的数据类型。原创 2024-11-17 10:43:58 · 372 阅读 · 0 评论 -
C 语言typedef 命令
typedef命令用来为某个类型起别名。上面代码中,type代表类型名,name代表别名。上面示例中,typedef命令为类型起别名BYTE,然后就可以使用BYTE声明变量。typedef 可以一次指定多个别名。上面示例中,一次性为int类型起了三个别名。typedef 可以为指针起别名。int a = 10;上面示例中,intptr是int*的别名。不过,使用的时候要小心,这样不容易看出来,变量x是一个指针类型。typedef 也可以用来为数组类型起别名。上面示例中,five_ints。原创 2024-11-16 11:22:51 · 906 阅读 · 0 评论 -
C 语言struct 结构
C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。实际使用中,主要有下面两种情况,需要更灵活强大的复合类型。复杂的物体需要使用多个变量描述,这些变量都是相关的,最好有某种机制将它们联系起来。某些函数需要传入多个参数,如果一个个按照顺序传入,非常麻烦,最好能组合成一个复合结构传入。为了解决这些问题,C 语言提供了struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起。原创 2024-11-16 11:20:51 · 1486 阅读 · 0 评论 -
C 语言的内存管理
C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量在函数运行时进入内存,函数运行结束后自动从内存卸载。这些变量存放的区域称为”栈“(stack),”栈“所在的内存是系统自动管理的。用户手动管理的内存,主要是程序运行的整个过程中都存在的变量(全局变量),这些变量需要用户手动从内存释放。如果使用后忘记释放,它就一直占用内存,直到程序退出,这种情况称为”内存泄漏“(memory leak)。原创 2024-11-15 20:18:22 · 980 阅读 · 0 评论 -
C 语言字符串
C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组。比如,字符串“Hello”是当作数组处理的。编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个全是二进制0的字节,写作\0字符,表示字符串结束。字符\0不同于字符0,前者的 ASCII 码是0(二进制形式00000000),后者的 ASCII 码是48(二进制形式00110000所以,字符串“Hello”实际储存的数组是。所有字符串的最后一个字符,都是\0。原创 2024-11-15 03:45:00 · 927 阅读 · 0 评论 -
C 语言数组
数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。上面示例声明了一个数组scores,里面包含100个成员,每个成员都是int类型。注意,声明数组时,必须给出数组的大小。数组的成员从0开始编号,所以数组就是从第0号成员一直到第99号成员,最后一个成员的编号会比数组长度小1。数组名后面使用方括号指定编号,就可以引用该成员。也可以通过该方式,对该位置进行赋值。上面示例对数组scores的第一个位置和最后一个位置,进行了赋值。原创 2024-11-14 02:45:00 · 963 阅读 · 0 评论 -
C 语言函数
函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。上面的代码声明了一个函数plus_one()。函数声明的语法有以下几点,需要注意。(1)返回值类型。函数声明时,首先需要给出返回值的类型,上例是int,表示函数plus_one()返回一个整数。(2)参数。函数名后面的圆括号里面,需要声明参数的类型和参数名,表示这个函数有一个整数参数n。(3)函数体。函数体要写在大括号里面,后面(即大括号外面)不需要加分号。原创 2024-11-14 00:45:00 · 1059 阅读 · 0 评论 -
C 语言指针
指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。字符表示指针,通常跟在类型关键字的后面,表示指针指向的是什么类型的值。比如,char*表示一个指向字符的指针,float*表示一个指向float类型的值的指针。上面示例声明了一个变量intPtr,它是一个指针,指向的内存地址存放的是一个整数。星号可以放在变量名与类型关键字之间的任何地方,下面的写法都是有效的。本书使用星号紧跟在类型关键字后面的写法(即。原创 2024-11-13 02:00:00 · 1770 阅读 · 0 评论 -
C 语言数据类型
整数类型用来表示较大的整数,类型声明使用int关键字。int a;上面示例声明了一个整数变量a。不同计算机的int类型的大小是不一样的。比较常见的是使用4个字节(32位)存储一个int类型的值,但是2个字节(16位)或8个字节(64位)也有可能使用。它们可以表示的整数范围如下。16位:-32,768 到 32,767。32位:-2,147,483,648 到 2,147,483,647。原创 2024-11-13 02:00:00 · 1740 阅读 · 0 评论 -
C 语言流程控制
C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。原创 2024-11-12 02:00:00 · 1250 阅读 · 0 评论 -
C 语言运算符
C 语言用于比较的表达式,称为“关系表达式”(relational expression),里面使用的运算符就称为“关系运算符”(relational operator),主要有下面6个。逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。将左侧运算数的每一位,向右移动指定的位数,尾部无法容纳的值将丢弃,头部空出来的位置使用。等到执行右侧表达式的时候,是用新的值在计算,这通常不是原始意图。原创 2024-11-12 01:45:00 · 1046 阅读 · 0 评论 -
C 语言变量
它的规则是:内层代码块可以使用外层声明的变量,但外层不可以使用内层声明的变量。另外,两个下划线开头的变量名,以及一个下划线 + 大写英文字母开头的变量名,都是系统保留的,自己不应该起这样的变量名。是在文件顶层声明的,从声明位置开始的整个当前文件都是它的作用域,可以在这个范围的任何地方读取这个变量,比如函数。)组成的代码块,它形成一个单独的作用域。文件作用域(file scope)指的是,在源码文件顶层声明的变量,从声明的位置到文件结束都有效。代码块里面声明的,所以对于大括号外面的代码,这个变量是不存在的。原创 2024-11-10 00:00:00 · 851 阅读 · 0 评论 -
C 语言基本语法
C 语言自带的所有这些功能,统称为“标准库”(standard library),因为它们是写入标准的,到底包括哪些功能,应该怎么使用的,都是规定好的,这样才能保证代码的规范和可移植。多层级的代码有没有缩进,其实对于编译器来说并没有差别,没有缩进的代码也是完全可以运行的。不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用。原创 2024-11-10 00:00:00 · 642 阅读 · 0 评论 -
C 语言简介
C 语言最初是作为 Unix 系统的开发工具而发明的。1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言。原创 2024-11-07 03:00:00 · 806 阅读 · 0 评论 -
C语言位运算
C语言位运算这一章主要介绍C语言位运算符表、C语言移位运算符、C语言&按位与运算符、C语言|按位或运算符、C语言^按位异或运算符以及C语言~取反运算符。与其他运算符不同,C语言中位运算,顾名思义,是以数值的二进制位为单位进行操作的,包含(右移)、~(按位取反)、&(按位与)、|(按位或)、^(按位异或)共六种运算符。在本章末尾,给大家做了C语言结课设计安排。原创 2024-10-20 03:00:00 · 1023 阅读 · 0 评论 -
C语言预处理
预处理命令可以改变程序设计环境,提高编程效率,它们并不是C语言本身的组成部分,不能直接对它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理”。经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对预处理之后的源程序进行编译处理,得到可供执行的目标代码。C语言提供的预处理功能有三种,分别为宏定义、文件包含和条件编译,下面将对它们进行简单介绍。宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”,被定义为“宏”的标识符称为“宏名”。原创 2024-10-19 17:03:44 · 992 阅读 · 0 评论 -
C语言结构体和共用体
前面我们已经讨论过字符数组与字符串,字符指针也可以指向一个字符串,可以用字符串常量对字符指针进行初始化。例如:这是对字符指针进行初始化。此时,字符指针指向一个字符串常量的首地址。结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。结构体的定义说明了它的组成成员,以及每个成员的数据类型。struct 结构类型名数据类型 成员名 1;数据类型 成员名 2;......数据类型 成员名 n;原创 2024-10-19 16:32:08 · 1254 阅读 · 0 评论 -
C语言指针
指针明白地址的概念之后,指针也就不奇怪了。简单地讲,地址就是逻辑内存上的编号,而指针虽然也表示一个编号,也是一个地址。但两者性质却不相同。一个代表了常量,另一个则是变量。就好比内存是一把尺子,而指针就是尺子上面的游标,可以左右移动,它某一个时刻是指向一个地方的,这就是指针变量。对指针变量定义的一般形式为:类型说明符 *变量名;其中,这里的*与前面的类型说明符共同说明这是一个指针变量,类型说明符表示该指针变量所指向的变量为何种数据类型,变量名即为定义的指针变量名。int main()原创 2024-10-18 22:58:44 · 995 阅读 · 0 评论 -
C语言数组
通过对前面知识的学习,我们已经知道如何定义和使用各种变量,但总有不够用的时候。举个例子,我要记录一个班32个同学C语言这科的成绩,难道要定义32个变量?嗯,这个当然可以,但是似乎好像觉得怪怪的~可以再联想一番,如果几百个人或者更多呢?丹尼斯·里奇(C语言的发明者,Unix之父,必须要牢记这位大师)早就为我们准备了数组这种类型。数组是同类型有序数据的集合,可以为这些数据的集合起一个名字,称为数组名。该集合中的各个数据项称为数组元素,每个元素可用数组名和下标表示。原创 2024-10-18 22:35:08 · 566 阅读 · 0 评论 -
C语言函数
C源程序是由函数组成的。最简单的程序有一个主函数main(),但实用程序往往由多个函数组成,由主函数调用其他函数,其他函数也可以互相调用。函数是C源程序的基本模块,程序的许多功能是通过对函数模块的调用来实现的,学会编写和调用函数可以提高编程效率。函数的定义返回值类型 函数名(形参表说明) /*函数首部*/说明语句 /*函数体*/执行语句对上面的定义形式进行以下说明:(1)“返回值类型”是指函数返回值的类型。原创 2024-10-17 18:27:15 · 739 阅读 · 0 评论 -
C语句和程序流
的执行过程为:首先计算表达式的值,然后依次与常量表达式依次进行比较,若表达式的值与某常量表达式相等,则从该常量表达式处开始执行,直到switch语句结束。若所有的常量表达式的值均不等于表达式的值,则从。大家可以看到每个case后面出了正常输出之外,还多加了一个break语句,用于提前结束switch结构。任何以分号结尾的表达式都是一个语句,它不一定要有意义。用于判断给定的条件,根据判断条件的成立与否来控制程序的流程。对于有三种或更多的结构,C语言除了用多分支选择结构。,顾名思义,跳出的意思,仅用于跳出。原创 2024-10-17 15:33:52 · 1129 阅读 · 0 评论 -
C语言运算符和表达式
因为不是所有的对象都是可更改值的,所以C使用术语“可修改的左值”来表示那些可以被更改的对象。所以,赋值运算符的左值应该是一个可修改的左值。lvalue中的l确实是英文单词left的意思,因为可修改的左值可以用在赋值运算符的左边。首先计算表达式1的值,看看是真还是假,也就是成立还是不成立,如果表达式1成立,那么这个三目运算符整体的值就是表达式2的值,否则(也就是表达式1不成立),这个三目运算符整体的值就是表达式3的值。,只需右边跟一个表达式,表示取反的意思,即原先真的取反则为假,原先假的取反则为真。原创 2024-10-16 22:54:04 · 1241 阅读 · 0 评论 -
C 语言中的基本输入与输出
在包含 include 头文件的情况下,可以用gets直接往字符数组里接收字符串,我们通过观察函数原型,可以看到在gets中传入一个字符指针,也就是存放这个字符串的字符数组地址即可接收,需要主要的是,要保证能存的下。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。,即按照格式字符串的格式,从键盘上把数据输入到指定的变量之中。原创 2024-10-16 22:29:19 · 1032 阅读 · 0 评论