C语言
文章平均质量分 75
入狱计划进度50%
不去想 他们拥有美丽的太阳
我看见 每天的夕阳也会有变化
展开
-
022 C语言基础:C内存管理与C命令行参数
首先给出大佬的链接:https://zhuanlan.zhihu.com/p/272920885在计算机中,每个应用程序之间的内存是相互独立的,通常情况下应用程序 A 并不能访问应用程序 B,当然一些特殊技巧可以访问,但此文并不详细进行说明。例如在计算机中,一个视频播放程序与一个浏览器程序,它们的内存并不能访问,每个程序所拥有的内存是分区进行管理的。在计算机系统中,运行程序 A 将会在内存中开辟程序 A 的内存区域 1,运行程序 B 将会在内存中开辟程序 B 的内存区域 2,内存区域 1 与内存区域 2 之原创 2022-06-21 13:42:15 · 440 阅读 · 0 评论 -
021 C语言基础:递归,可变参数
递归是以自身相似的方式重复项目的处理过程。同样的,在编程语言中,在函数内部调用函数自身,称为递归调用。C 语言支持递归,即,一个函数可以调用自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入无限循环。递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列,等等。 有时,可能会碰到这样的情况,希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示原创 2022-06-21 13:31:26 · 304 阅读 · 0 评论 -
020 C语言基础:C语言强制类型转换与错误处理
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。实例: 就是隐式的把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则他们会被转换为下列层次中出现的最高层次的类型:常用的算术转换不适用于赋值运算符,逻辑运算符&&和||。让我们看看下面的实例来理解这个概念:在这里,c 首先被转换为整数,但是由于最后的值原创 2022-06-21 13:24:35 · 867 阅读 · 0 评论 -
019 C语言基础:C预处理
前面各章中,已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。这种以#号开头的命令称为预处理命令。在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。预处理主要是处理以#开头的命令,例如#include 等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。我们把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应...原创 2022-06-20 17:01:46 · 270 阅读 · 0 评论 -
018 C语言基础:C文件读写
我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如,通常把显示器称为标准输出文件,printf 就是向这个文件输出,把键盘称为标准输入文件,scanf 就是从这个文件获取数据。常见硬件设备与文件的对应关系 所有的文件都是保存在磁盘上的,要载入内存才能处理,所有的数据必须写入文件(磁盘)才不会丢失。原创 2022-06-20 16:39:54 · 547 阅读 · 0 评论 -
017 C语言基础:位域和typedef
有些数据在存储时并不需要占用一个完整的字符,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用0和1表示足以,也就是用一个二进位。正式基于这种考虑,C语言又提供了一种叫做位域的数据结构。那么什么是位域呢?在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。例如:对于 n 和 ch,第一次输出的数据是完整的,第二次输出的数据是残缺的。第一次输出时,n、ch 的值分别是 0xE、0x24(‘$’ 对应的 ASCII 码为 0x24),换算成二进制是 1110、原创 2022-06-20 16:07:30 · 581 阅读 · 2 评论 -
016 C语言基础:C语言枚举类型
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。以每周七天为例,我们可以使用#define命令来给每天指定一个名字:#define命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。 需要注意的两点是:枚举列表中的 Mon、Tues、Wed 这些标识符的原创 2022-06-20 15:55:30 · 229 阅读 · 0 评论 -
015 C语言基础:C结构体、共用体
前面的章节学习了数组,他是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。在C语言中,可以使用结构体来存放一组不同类型的数据。结构体的定义形式为:结构体是一种集合,里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称之为结构体的成员。像int、float、char等是由C语言本身提供的数据类型,不能原创 2022-06-20 15:49:14 · 177 阅读 · 0 评论 -
014 C语言基础:C字符串
在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。空字符(Null character)又称结束符,缩写 NULL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。比如单词“hello”由于在末尾多了个"",所以字符数组的大小比单词"hello"的字符数多一个。依据数组初始化规则,可以把上面的语句写成以下语句: strcpy 函数由于不对数组边界进行检查,而非常容易造成各种缓冲区溢出的漏洞。这些漏原创 2022-06-20 15:28:29 · 159 阅读 · 0 评论 -
013 C语言基础:C指针
学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。通过上面的实例,我们了解了什么是内存地址以及如何访问它。接下来让我们看看什么是指针。 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:在这里type是指针的原创 2022-06-20 15:19:42 · 518 阅读 · 0 评论 -
012 C语言基础:C数组
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。数原创 2022-06-18 18:47:20 · 518 阅读 · 2 评论 -
011 C语言基础:C作用域规则
任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量: 在某个函数或块的内部声明的变量称为局部变量。只能被该函数或该代码内部的语句使用。局部变量在函数外部是不可知的。 全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。全局变量可以被任何函数访问。也就是说,全局变量在声明后整个程序中都是可用的。 函数的参数,形式参数,被当做该函数内的局部变量,他们会优先覆盖全局变量。 当局部原创 2022-06-18 18:30:43 · 119 阅读 · 0 评论 -
010 C语言基础:C函数
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。函数还有很多叫法,比如方原创 2022-06-18 18:22:57 · 236 阅读 · 0 评论 -
009 C语言基础:C循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 多次执行一个语句序列,简化管理循环变量的代码。下面是 for 循环的控制流:init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。在执行完 for 循环主体后,控原创 2022-06-18 18:02:55 · 112 阅读 · 0 评论 -
008 C语言基础:C判断
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if…else语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。注意区分,和Python语法有区别: 允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个swi原创 2022-06-18 17:51:24 · 207 阅读 · 0 评论 -
007 C语言基础:C运算符
运算符是一种告诉编译器执行特定的数字或逻辑操作的符号。 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:实例:结果:区别:a++与++a,a++ 和 ++a的相同点都是给a+1,不同点是a++是先赋值再+1,而++a则是先+1再参赋值。 在C 语言中,位运算符主要是用于数值类型的二进制的运算。案例说明:假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下原创 2022-06-18 17:27:24 · 226 阅读 · 0 评论 -
006 C语言基础:C存储类
存储类用来定义C程序中变量、函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。 auto存储类是所有局部变量的默认存储类,下面的实例定义了两个带有相同存储类的变量,可以理解为这两行等价,auto只能用在函数内,即auto只能修饰局部变量。 先看一段非人类的解释:register存储类用于定义存储在寄存器中而不是RAM中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字节),且不能对它应用一元的’&'运算符(因为它没有内存位置)是不是一脸懵逼?要明白上面的话,首先要明原创 2022-06-18 11:25:33 · 298 阅读 · 0 评论 -
005 C语言基础:C变量与常量
变量其实只不过是程序可操作的存储区的名称。C中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以有字母,数字,下划线字符组成。必须以字母或者下划线开头。C是区分大小写的。变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double、bool原创 2022-06-10 09:55:49 · 160 阅读 · 0 评论 -
004 C语言基础:C数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C中的类型可以分为以下几种; 为了得到某个类型或某个变量在特定平台上的准确大小,可以使用sizeof运算符。表达式sizeof(type)得到对象或类型的存储字节大小。下面演示获取int类型的大小:补充: 列出了关于标准浮点类型的存储大小、值范围和精度的细节:头文件float.h定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮原创 2022-06-10 09:34:49 · 114 阅读 · 0 评论 -
003 C语言基础:C程序结构与基本语法
C程序主要包括以下部分:预处理指令函数变量语句&表达式注释第一个C程序代码:编译,执行C程序接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它。下面是简单的步骤: C 程序由各种标记组成,标记可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个标记: 在C程序中,分号是语句结束符,也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。 C标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或a原创 2022-06-09 19:12:12 · 146 阅读 · 0 评论 -
002 C语言基础:C 环境设置
如果想要设置 C 语言环境,需要确保电脑上有以下两款可用的软件,文本编辑器和 C 编译器。 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 、sublime、vscode(推荐)和 vim/vi。文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上。vscode拥有多平台支持,W原创 2022-06-09 18:58:06 · 111 阅读 · 0 评论 -
001 C语言基础:C简介
C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。 C 语言是原创 2022-06-09 18:24:21 · 136 阅读 · 0 评论