上一章解释了 C 编程语言处理的标准输入和输出设备。本章介绍了 C 程序员如何为他们的数据存储创建、打开、关闭文本或二进制文件。 一个文件代表一个字节序列,不管它是文本文件还是二进制文件。 C 编程语言提供对高级函数的访问以及低级(操作系统级)调用来处理存储设备上的文件。本章将带您了解文件管理的重要调用。 打开文件 您可以使用 fopen( ) 创建新文件或打开现有文件的功能。此调用将初始化 FILE 类型的对象 ,其中包含控制流所需的所有信息。该函数调用的原型如下 - FILE *fopen( const char * filename, const char * mode );
当我们说输入 ,这意味着将一些数据输入到程序中。输入可以以文件的形式给出,也可以从命令行给出。 C 编程提供了一组内置函数来读取给定的输入并根据需要将其提供给程序。 当我们说输出 , 这意味着在屏幕、打印机或任何文件中显示一些数据。 C 编程提供了一组内置函数,可以将数据输出到计算机屏幕上,也可以将其保存为文本或二进制文件。 标准文件 C 编程将所有设备视为文件。因此显示器等设备的寻址方式与文件相同,当程序执行以提供对键盘和屏幕的访问时,会自动打开以下三个文件。 标准文件 文件指针 设备 标准输入 标准输入 键盘 标准输出 标准输出 画面 标准错误 标准错误 你的屏幕 文件指针
C 编程语言提供了一个名为 typedef 的关键字 ,你可以用它来给一个类型一个新的名字。以下是定义术语 BYTE 的示例 对于单字节数字 - typedef unsigned char BYTE; 在此类型定义之后,标识符 BYTE 可以用作类型 unsigned char 的缩写,例如。 . BYTE b1, b2; 按照惯例,这些定义使用大写字母,以提醒用户类型名称实际上是一个符号缩写,但您可以使用小写,如下 - typedef unsigned char byte; 您可以使用 typedef 为您的用户定义的数据类型命名。例如,您可以将 typedef 与结构一
假设您的 C 程序包含许多 TRUE/FALSE 变量,这些变量分组在一个名为 status 的结构中,如下 - struct { unsigned int widthValidated; unsigned int heightValidated; } status; 这个结构需要 8 个字节的内存空间,但实际上,我们将在每个变量中存储 0 或 1。在这种情况下,C 编程语言提供了一种更好地利用内存空间的方法。 如果您在结构中使用此类变量,那么您可以定义一个变量的宽度,它告诉 C 编译器您将只使用这些字节数。例如,上面的结构可以改写如下 - struct { uns
一个联合 是 C 中可用的一种特殊数据类型,它允许在同一内存位置存储不同的数据类型。您可以定义具有许多成员的联合,但在任何给定时间只有一个成员可以包含值。联合提供了一种将同一内存位置用于多种用途的有效方式。 定义联合 要定义联合,您必须使用 union 以与定义结构时相同的方式声明。 union 语句为您的程序定义了一种具有多个成员的新数据类型。 union 语句的格式如下 - union [union tag] { member definition; member definition; ... member definition; } [one or more
数组允许定义可以保存多个相同类型数据项的变量类型。同样的结构 是 C 中另一种用户定义的数据类型,它允许组合不同类型的数据项。 结构用于表示记录。假设您想跟踪图书馆中的书籍。您可能想要跟踪关于每本书的以下属性 - 标题 作者 主题 图书编号 定义结构 要定义结构,您必须使用 struct 陈述。 struct 语句定义了一种具有多个成员的新数据类型。 struct语句的格式如下 - struct [structure tag] { member definition; member definition; ... member definition; } [
字符串实际上是由 null 终止的一维字符数组 字符\0。因此,以 null 结尾的字符串包含组成字符串的字符,后跟 null . 下面的声明和初始化创建了一个由单词“Hello”组成的字符串。为了在数组末尾保存空字符,包含字符串的字符数组的大小比单词“Hello”中的字符数大一。 char greeting[6] = {H, e, l, l, o, \0}; 如果你遵循数组初始化的规则,那么你可以将上面的语句写成如下 - char greeting[] = Hello; 以下是上述定义的字符串在 C/C++ 中的内存表示 - 实际上,您没有放置 null 字符串常量末尾的字
C 语言中的指针学习起来既简单又有趣。使用指针可以更轻松地执行某些 C 编程任务,而不使用指针则无法执行其他任务,例如动态内存分配。所以学习指针成为一个完美的C程序员就变得很有必要了。让我们通过简单易行的步骤开始学习它们。 如您所知,每个变量都是一个内存位置,每个内存位置都定义了它的地址,可以使用 &运算符访问它,它表示内存中的一个地址。考虑以下示例,它打印定义的变量的地址 - 现场演示 #include <stdio.h> int main () { int var1; char var2[10]; printf(Address of var1 va
数组是一种数据结构,可以存储相同类型元素的固定大小的顺序集合。数组用于存储数据的集合,但通常将数组视为相同类型变量的集合会更有用。 不用声明单独的变量,例如 number0、number1、...和 number99,而是声明一个数组变量,例如 numbers,并使用 numbers[0]、numbers[1] 和 ...、numbers[99] 来表示个体变量。通过索引访问数组中的特定元素。 所有数组都由连续的内存位置组成。最低地址对应第一个元素,最高地址对应最后一个元素。 声明数组 为了在 C 中声明一个数组,程序员指定元素的类型和数组所需的元素数量如下 - type arr
任何编程中的作用域都是程序的一个区域,其中定义的变量可以存在,并且超出该变量不能访问。在 C 编程语言中可以声明变量的三个地方 - 在称为 local 的函数或块内 变量。 在所有称为 global 的函数之外 变量。 在被称为正式的函数参数的定义中 参数。 让我们了解什么是本地 和全局 变量和正式 参数。 局部变量 在函数或块中声明的变量称为局部变量。它们只能由该函数或代码块内的语句使用。局部变量对于它们自身之外的函数是未知的。以下示例显示了如何使用局部变量。这里所有的变量 a、b 和 c 都是 main() 函数的局部变量。 现场演示 #include <
函数是一组一起执行任务的语句。每个 C 程序至少有一个函数,即 main() ,所有最琐碎的程序都可以定义附加函数。 您可以将代码分成单独的函数。如何在不同的函数之间划分代码取决于您,但从逻辑上讲,划分是这样的,每个函数都执行特定的任务。 一个函数声明 告诉编译器函数的名称、返回类型和参数。一个函数定义 提供函数的实际主体。 C 标准库提供了许多程序可以调用的内置函数。例如,strcat() 连接两个字符串,memcpy() 将一个内存位置复制到另一个位置,以及更多功能。 函数也可以称为方法或子例程或过程等。 定义函数 C 编程语言中函数定义的一般形式如下 - return_typ
您可能会遇到需要多次执行一段代码的情况。一般来说,语句是按顺序执行的:函数中的第一条语句首先执行,然后是第二条,依此类推。 编程语言提供了各种控制结构,允许更复杂的执行路径。 循环语句允许我们多次执行一条语句或一组语句。下面给出了大多数编程语言中循环语句的一般形式 - C 编程语言提供以下类型的循环来处理循环需求。 Sr.No. 循环类型和描述 1 while 循环 在给定条件为真时重复一个语句或一组语句。它在执行循环体之前测试条件。 2 for 循环 多次执行一系列语句并缩写管理循环变量的代码。 3 do...while 循环 它更像是一个while语句,只是它在循环
决策结构要求程序员指定一个或多个要由程序评估或测试的条件,以及如果条件被确定为真则要执行的一个或多个语句,以及可选地,如果条件确定则要执行的其他语句被判定为假。 下面显示的是大多数编程语言中典型决策结构的一般形式 - C 编程语言假定任何非零 和非空 值为 true , 如果它是 zero 或 null ,则假定为 false 价值。 C编程语言提供了以下几种决策语句。 Sr.No. 声明和说明 1 if 语句 if 语句 由一个布尔表达式和一个或多个语句组成。 2 if...else 语句 if 语句 后面可以跟一个可选的 else 语句 ,当布尔表达式为假时执行。 3
运算符是告诉编译器执行特定数学或逻辑函数的符号。 C语言内置了丰富的运算符,提供了以下几种运算符 - 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 在本章中,我们将研究每个运算符的工作方式。 算术运算符 下表显示了 C 语言支持的所有算术运算符。假设变量 A 持有 10 和变量 B 然后持有 20 - 显示示例 运算符 描述 示例 + 添加两个操作数。 A + B =30 − 从第一个操作数中减去第二个操作数。 A - B =-10 * 将两个操作数相乘。 A * B =200 / 用分子除以分子。 B / A =2 % 取模运算
存储类定义了 C 程序中变量和/或函数的范围(可见性)和生命周期。它们在它们修改的类型之前。我们在 C 程序中有四种不同的存储类 - 自动 注册 静态 外部 自动存储类 自动 存储类是所有局部变量的默认存储类。 { int mount; auto int month; } 上面的示例在同一个存储类中定义了两个变量。 auto 只能在函数内使用,即局部变量。 寄存器存储类 注册 存储类用于定义应存储在寄存器而不是 RAM 中的局部变量。这意味着该变量的最大大小等于寄存器大小(通常是一个字),并且不能对其应用一元 & 运算符(因为它没有内存位置)。 { regis
常量是指程序在执行过程中可能不会改变的固定值。这些固定值也称为 literals . 常量可以是任何基本数据类型,例如整数常量、浮点常量、字符常量或字符串字面量 .还有枚举常量。 常量的处理方式与常规变量一样,只是它们的值在定义后不能修改。 整数字面量 整数文字可以是十进制、八进制或十六进制常量。前缀指定基数或基数:0x 或 0X 表示十六进制,0 表示八进制,没有任何内容表示十进制。 整数文字也可以有一个后缀,它是 U 和 L 的组合,分别表示无符号和长整数。后缀可以大写也可以小写,顺序不限。 以下是整数文字的一些示例 - 212 /* Legal */ 215u
变量只不过是我们的程序可以操作的存储区域的名称。 C中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以存储在该内存中的值的范围;以及可以应用于变量的操作集。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写和小写字母是不同的,因为 C 区分大小写。基于上一章解释的基本类型,将有以下基本变量类型 - Sr.No. 类型和描述 1 字符 通常是一个八位字节(一个字节)。是整数类型。 2 int 机器最自然的整数大小。 3 浮动 单精度浮点值。 4 双 双精度浮点值。 5 无效 表示没有类型。
c 中的数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占用了多少空间以及如何解释存储的位模式。 C中的类型可以分类如下 - Sr.No. 类型和描述 1 基本类型 它们是算术类型,进一步分为:(a)整数类型和(b)浮点类型。 2 枚举类型 它们又是算术类型,用于定义在整个程序中只能分配某些离散整数值的变量。 3 类型 void 类型说明符 void 表示没有可用的值。 4 派生类型 它们包括(a)指针类型,(b)数组类型,(c)结构类型,(d)联合类型和(e)函数类型。 数组类型和结构类型统称为聚合类型。函
您已经了解了 C 程序的基本结构,因此很容易理解 C 编程语言的其他基本构建块。 C 中的标记 C 程序由各种标记组成,标记可以是关键字、标识符、常量、字符串文字或符号。例如,以下 C 语句由五个标记组成 - printf(Hello, World! \n); 各个令牌是 - printf ( Hello, World! \n ) ; 分号 在 C 程序中,分号是语句终止符。也就是说,每个单独的语句都必须以分号结尾。它表示一个逻辑实体的结束。 下面给出了两个不同的陈述 - printf(Hello, World! \n); return 0; 评论 注释就像 C 程
在我们研究 C 编程语言的基本构建块之前,让我们先看一下 C 程序结构的最低限度,以便我们可以在接下来的章节中将其作为参考。 Hello World 示例 一个 C 程序基本上由以下部分组成 - 预处理器命令 功能 变量 语句和表达式 评论 让我们看一个打印“Hello World”字样的简单代码 - 现场演示 #include <stdio.h> int main() { /* my first program in C */ printf(Hello, World! \n); return 0; } 让我们看一下上述程序的各个部分 -
C语言