
c
半宛清愁
枯藤长出枝桠,原来时光已翩然轻擦。
展开
-
c之简介
C 简介C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX 操作系统,C编译器,和几...原创 2018-02-09 14:09:51 · 3472 阅读 · 0 评论 -
c之结构体
C 结构体C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:TitleAuthorSubjectBook ID定义结构为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语...原创 2018-02-09 15:04:20 · 3388 阅读 · 0 评论 -
c之共用体
C 共用体共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union [union tag]{ mem...原创 2018-02-09 15:10:08 · 3464 阅读 · 0 评论 -
c之位域
C 位域如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下:struct{ unsigned int widthValidated; unsigned int heightValidated;} status;这种结构需要 8 字节的内存空间,但在实际上,在每个变量中,我们只存储 0 或 1。在这种情况下,C 语言提供了一种更好的利用内存空间的方式。如果您在结构内使...原创 2018-02-09 15:12:50 · 3349 阅读 · 0 评论 -
c之typedef
C typedefC 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:typedef unsigned char BYTE;在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:BYTE b1, b2;按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可以使用小写...原创 2018-02-09 15:14:59 · 3368 阅读 · 0 评论 -
c之输入输出
C 输入 & 输出当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。标准文件C 语言把所有的设备都当作文件。所以设备(比...原创 2018-02-09 15:22:32 · 3471 阅读 · 0 评论 -
c之文件读写
C 文件读写上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调...原创 2018-02-09 15:26:34 · 3449 阅读 · 0 评论 -
c之预处理
C 预处理器C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:指令描述#...原创 2018-02-09 15:29:50 · 3404 阅读 · 0 评论 -
c之强制类型转换
C 强制类型转换强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name) expression请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:#incl...原创 2018-02-09 15:34:46 · 3945 阅读 · 0 评论 -
c之错误处理
C 错误处理C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 <error.h> 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定...原创 2018-02-09 15:36:13 · 3459 阅读 · 0 评论 -
c之递归
C 递归递归指的是在函数的定义中使用函数自身的方法。举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'"语法格式如下:void recursion(){ recursion(); /* 函数调用自身...原创 2018-02-09 15:44:20 · 3501 阅读 · 0 评论 -
c之可变参数
C 可变参数有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示了这种函数的定义。int func(int, ... ) { . . .}int main(){ func(2, 2, 3); func(3, 2, 3,...原创 2018-02-09 15:47:08 · 3350 阅读 · 0 评论 -
c之内存管理
C 内存管理本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。序号函数和描述1void *calloc(int num, int size);在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值...原创 2018-02-09 15:48:59 · 3387 阅读 · 0 评论 -
c之字符串
C 字符串在 C 语言中,字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 "Hello" 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 "Hello" 的字符数多一个。char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};...原创 2018-02-09 14:57:24 · 3419 阅读 · 0 评论 -
c之函数指针与回调函数
函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针变量的声明:typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型实例以下实例声明了函数指针变量 p,指向函数 max:实例#include <stdio.h...原创 2018-02-09 14:56:13 · 3395 阅读 · 0 评论 -
c之指针
C 指针学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:实例#include &...原创 2018-02-09 14:49:02 · 3450 阅读 · 0 评论 -
c之程序结构
C 程序结构在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考。C Hello World 实例C 程序主要包括以下部分:预处理器指令函数变量语句 & 表达式注释让我们看一段简单的代码,可以输出单词 "Hello World":实例#include <stdio.h> int main(){ /* 我的第一个 C ...原创 2018-02-09 14:11:40 · 3420 阅读 · 0 评论 -
c之基本语法
C 基本语法我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块。C 的令牌(Tokens)C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:printf("Hello, World! \n");这五个令牌分别是:printf("Hello, World! \n");分号 ;在 C 程序中,分号...原创 2018-02-09 14:13:19 · 3443 阅读 · 0 评论 -
c之数据类型
C 数据类型在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。C 中的类型可分为以下几种:序号类型与描述1基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。2枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。3void 类型:类型说明符 void 表明没有可用的值。4派生...原创 2018-02-09 14:15:41 · 3623 阅读 · 0 评论 -
c之变量
C 变量变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型:类型描述char通常是一个字节(八位)。这是一个整数类型。...原创 2018-02-09 14:18:08 · 3402 阅读 · 0 评论 -
c之常量
C 常量常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 ...原创 2018-02-09 14:20:58 · 3562 阅读 · 0 评论 -
c之存储类
C 存储类存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:autoregisterstaticexternauto 存储类auto 存储类是所有局部变量默认的存储类。{ int mount; auto int month;}上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 au...原创 2018-02-09 14:25:44 · 3450 阅读 · 0 评论 -
c之运算符
C 运算符运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。算术运算符下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:运算符描述实例+把两个操作数相加...原创 2018-02-09 14:36:28 · 3410 阅读 · 0 评论 -
c之判断
C 判断判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。下面是大多数编程语言中典型的判断结构的一般形式:判断语句C 语言提供了以下类型的判断语句。点击链接查看每个语句的细节。语句描述if 语句一个 if 语句 由一个布尔表达式后跟一个或多个...原创 2018-02-09 14:38:50 · 3425 阅读 · 0 评论 -
c之循环
C 循环有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了更为复杂执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:循环类型C 语言提供了以下几种循环类型。点击链接查看每个类型的细节。循环类型描述while 循环当给定条件为真时,重复语句或语句组。它会...原创 2018-02-09 14:39:49 · 3417 阅读 · 0 评论 -
c之函数
C 函数函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。C 标准库提供了大量的程序可以调用的内置函数。例...原创 2018-02-09 14:40:49 · 3416 阅读 · 0 评论 -
c之作用域
C 作用域规则任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:在函数或块内部的局部变量在所有函数外部的全局变量在形式参数的函数参数定义中让我们来看看什么是局部变量、全局变量和形式参数。局部变量在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例...原创 2018-02-09 14:43:42 · 3360 阅读 · 0 评论 -
c之数组
C 数组C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量...原创 2018-02-09 14:46:21 · 3395 阅读 · 0 评论 -
c之命令行参数
C 命令行参数执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:#i...原创 2018-02-09 15:57:17 · 4169 阅读 · 0 评论