
c语言
文章平均质量分 85
基础学习
Jason悠
野生程序员一枚,请多多指教!
展开
-
C语言--多字节字符(Unicode)
C 语言诞生时,只考虑了英语字符,使用7位的 ASCII 码表示所有字符。ASCII 码的范围是0到127,也就是最多只能表示100多个字符,用一个字节就可以表示,所以char类型只占用一个字节。但是,如果处理非英语字符,一个字节就不够了,单单是中文,就至少有几万个字符,字符集就势必使用多个字节表示。最初,不同国家有自己的字符编码方式,这样不便于多种字符的混用。因此,后来就逐渐统一到 Unicode 编码,将所有字符放入一个字符集。原创 2025-04-07 14:19:55 · 586 阅读 · 0 评论 -
C语言--命令行环境
这两个参数的名字可以任意取,但是一般来说,约定俗成就是使用这两个词。C 语言会把命令行输入的内容,放在一个数组里面。是一个数组,保存了所有的命令行输入,它的每个成员是一个字符串指针。由于字符串指针可以看成是字符数组,所以下面三种写法是等价的。的每个成员,一旦移到空指针 NULL,就表示遍历结束。是命令行参数的数量,由于程序名也被计算在内,所以严格地说。就会报错,这样就限定了程序必须有两个参数,才能运行。,就表示上一条命令运行成功,否则就是运行失败。所以,参数的遍历也可以写成下面这样。原创 2025-04-07 14:19:02 · 287 阅读 · 0 评论 -
C语言--多文件项目
一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。假定一个项目有两个源码文件foo.c和bar.c,其中foo.c是主文件,bar.c是库文件。所谓“主文件”,就是包含了main()函数的项目入口文件,里面会引用库文件定义的各种函数。// 5!上面代码中,主文件foo.c调用了函数add(),这个函数是在库文件bar.c里面定义的。现在,将这两个文件一起编译。# 更省事的写法上面命令中,gcc 的-o参数指定生成的二进制可执行文件的文件名,本例是foo。原创 2025-04-07 14:18:14 · 929 阅读 · 0 评论 -
C 语言--变量说明符
C 语言允许声明变量的时候,加上一些特定的说明符(specifier),为编译器提供变量行为的额外信息。它的主要作用是帮助编译器优化代码,有时会对程序行为产生影响。原创 2025-04-07 14:17:17 · 244 阅读 · 0 评论 -
C 语言--文件操作
这是因为从文件读取的二进制值,不管作为无符号数字解释,还是作为 ASCII 码解释,都不可能是负值,所以可以很安全地返回-1,不会跟文件本身的数据相冲突。但是,读取的时候,有不同的解读方法:以原本的二进制形式解读,叫做“二进制流”;所有的文件读取函数都使用相同的缓冲区,后面再调用任何一个读取函数,都将从指示器指向的位置,即上一次读取函数停止的位置开始读取。需要注意的是,不像字符串结尾真的存储了\0这个值,EOF并不存储在文件结尾,文件中并不存在这个值,完全是文件操作函数发现到达了文件结尾,而返回这个值。原创 2025-04-07 14:15:28 · 753 阅读 · 0 评论 -
C 语言--I/O 函数
C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。原创 2025-04-07 14:14:12 · 913 阅读 · 0 评论 -
C语言--预处理器(Preprocessor)
C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。预处理器首先会清理代码,进行删除注释、多行语句合成一个逻辑行等工作。然后,执行开头的预处理指令。本章介绍 C 语言的预处理指令。预处理指令可以出现在程序的任何地方,但是习惯上,往往放在代码的开头部分。每个预处理指令都以开头,放在一行的行首,指令前面可以有空白字符(比如空格或制表符)。和指令的其余部分之间也可以有空格,但是为了兼容老的编译器,一般不留空格。所有预处理指令都是一行的,除非在行尾使用反斜杠,将其折行。原创 2025-04-07 14:13:25 · 705 阅读 · 0 评论 -
C语言--Enum 类型
但是,C 语言也允许为 ENUM 常量指定值,不过只能指定为整数,不能是其他类型。因此,任何可以使用整数的场合,都可以使用 Enum 常量。由于 Enum 的属性会自动声明为常量,所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。如果一种数据类型的取值只有少数几种可能,并且每种取值都有自己的含义,为了提高代码的可读性,可以将它们定义为 Enum 类型,中文名为枚举。注意,Enum 内部的常量名,遵守标识符的命名规范,但是通常都使用大写。Enum 常量可以是不连续的值。原创 2025-04-07 14:12:30 · 284 阅读 · 0 评论 -
C语言--Union 结构
定义了三个属性,但同一时间只用到一个,使用 Union 结构就可以节省另外两个属性的空间。它内部可以包含各种属性,但同一时间只能有一个属性,因为所有属性都保存在同一个内存地址,后面写入的属性会覆盖前面的属性。除了这一点,Union 结构的其他用法与 Struct 结构,基本上是一致的。最后赋值的属性,就是可以取到值的那个属性。Union 结构指针与它的属性有关,当前哪个属性能够取到值,它的指针就是对应的数据类型。是 foo 结构的指针,它的数据类型完全由当前赋值的属性决定。属性可以取到值,就要先为它赋值。原创 2025-04-07 14:11:47 · 185 阅读 · 0 评论 -
C语言-- typedef 命令
typedef命令用来为某个类型起别名。上面代码中,type代表类型名,name代表别名。上面示例中,typedef命令为类型起别名BYTE,然后就可以使用BYTE声明变量。typedef 可以一次指定多个别名。上面示例中,一次性为int类型起了三个别名。typedef 可以为指针起别名。int a = 10;上面示例中,intptr是int*的别名。不过,使用的时候要小心,这样不容易看出来,变量x是一个指针类型。typedef 也可以用来为数组类型起别名。上面示例中,five_ints。原创 2025-03-24 15:35:26 · 335 阅读 · 0 评论 -
C语言--struct 结构
C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。实际使用中,主要有下面两种情况,需要更灵活强大的复合类型。复杂的物体需要使用多个变量描述,这些变量都是相关的,最好有某种机制将它们联系起来。某些函数需要传入多个参数,如果一个个按照顺序传入,非常麻烦,最好能组合成一个复合结构传入。为了解决这些问题,C 语言提供了struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起。原创 2025-03-24 15:34:34 · 550 阅读 · 0 评论 -
C 语言的内存管理
C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量在函数运行时进入内存,函数运行结束后自动从内存卸载。这些变量存放的区域称为”栈“(stack),”栈“所在的内存是系统自动管理的。用户手动管理的内存,主要是程序运行的整个过程中都存在的变量(全局变量),这些变量需要用户手动从内存释放。如果使用后忘记释放,它就一直占用内存,直到程序退出,这种情况称为”内存泄漏“(memory leak)。原创 2025-03-24 15:29:06 · 257 阅读 · 0 评论 -
C语言--字符串
C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组。比如,字符串“Hello”是当作数组处理的。编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个全是二进制0的字节,写作\0字符,表示字符串结束。字符\0不同于字符0,前者的 ASCII 码是0(二进制形式00000000),后者的 ASCII 码是48(二进制形式00110000所以,字符串“Hello”实际储存的数组是。所有字符串的最后一个字符,都是\0。原创 2025-03-24 15:27:46 · 524 阅读 · 0 评论 -
C语言--数组实验
数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。上面示例声明了一个数组scores,里面包含100个成员,每个成员都是int类型。注意,声明数组时,必须给出数组的大小。数组的成员从0开始编号,所以数组就是从第0号成员一直到第99号成员,最后一个成员的编号会比数组长度小1。数组名后面使用方括号指定编号,就可以引用该成员。也可以通过该方式,对该位置进行赋值。上面示例对数组scores的第一个位置和最后一个位置,进行了赋值。原创 2025-03-24 15:25:37 · 841 阅读 · 0 评论 -
C语言--函数
函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。上面的代码声明了一个函数plus_one()。函数声明的语法有以下几点,需要注意。(1)返回值类型。函数声明时,首先需要给出返回值的类型,上例是int,表示函数plus_one()返回一个整数。(2)参数。函数名后面的圆括号里面,需要声明参数的类型和参数名,表示这个函数有一个整数参数n。(3)函数体。函数体要写在大括号里面,后面(即大括号外面)不需要加分号。原创 2025-03-24 15:24:43 · 882 阅读 · 0 评论 -
C语言--指针
指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。字符表示指针,通常跟在类型关键字的后面,表示指针指向的是什么类型的值。比如,char*表示一个指向字符的指针,float*表示一个指向float类型的值的指针。上面示例声明了一个变量intPtr,它是一个指针,指向的内存地址存放的是一个整数。星号可以放在变量名与类型关键字之间的任何地方,下面的写法都是有效的。本书使用星号紧跟在类型关键字后面的写法(即。原创 2025-03-24 15:12:04 · 474 阅读 · 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。原创 2025-03-24 15:09:49 · 858 阅读 · 0 评论 -
C语言--流程控制
C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。原创 2025-03-24 15:02:33 · 764 阅读 · 0 评论 -
C语言--运算符
C 语言的运算符非常多,一共有 50 多种,可以分成若干类。原创 2025-03-24 15:01:35 · 965 阅读 · 0 评论 -
C语言--变量
变量(variable)可以理解成一块内存区域的名字。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了。原创 2025-03-24 14:34:02 · 627 阅读 · 0 评论 -
C 语言基本语法
C 语言自带的所有这些功能,统称为“标准库”(standard library),因为它们是写入标准的,到底包括哪些功能,应该怎么使用的,都是规定好的,这样才能保证代码的规范和可移植。多层级的代码有没有缩进,其实对于编译器来说并没有差别,没有缩进的代码也是完全可以运行的。不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用。原创 2025-03-24 14:30:37 · 515 阅读 · 0 评论 -
C语言--简介
C 语言是一种编译型语言,源码都是文本文件,本身无法执行。1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。除了计算机,C 语言现在还是嵌入式系统的首选编程语言,汽车、照相机、家用电器等设备的底层系统都是用 C 语言编程,这也是因为它良好的可移植性。而且,C 语言的语法都是基础语法,不提供高级的数据结构,比如 C 语言没有“类”(class),复杂的数据结构都需要自己构造。原创 2025-03-24 14:28:30 · 613 阅读 · 0 评论