决策结构要求程序员指定条件表达式,并给出条件为真/假时执行的语句。通用形式: C++五大决策语句 序号语句与说明 1if语句布尔表达式后跟一或多条语句。 2if...else语句if后可选跟else,表达式为假时执行。 3switch语句变量与值列表逐一比对,匹配则执行对应分支。 4嵌套if语句在if/else if内再嵌套if/else if。 5嵌套switch语句在switch内嵌套switch。 条件运算符 ? : 可替代简单if...else,通用形式: Exp1 ? Exp2 : Exp3; 求值规则:先算Exp1,真则算Exp2作为整体值,假则算Exp3作为整体值。注意冒
当需要重复执行代码块时,循环结构登场。语句默认顺序执行,循环提供复杂控制流。 通用循环形式: C++四大循环类型 序号循环类型与说明 1while循环条件为真时重复执行。先判断后执行(零次可能)。 2for循环多次执行序列,内置循环变量管理(初始化、判断、迭代三表达式)。 3do...while循环类似while,但先执行后判断(至少执行一次)。 4嵌套循环在while/for/do..while内部再嵌套循环。 循环控制语句 改变正常执行序列。离开作用域时,该作用域内自动对象被销毁。 序号控制语句与说明 1break终止最近层循环或switch,跳转至其后语句。 2continue
运算符是指示编译器执行特定数学/逻辑操作的符号。C++内置运算符丰富,分六大类: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 算术运算符 假设A=10、B=20: 运算符说明示例 +加法A+B=30 -减法(左减右)A-B=-10 *乘法A*B=200 /除法(分子/分母)B/A=2 %取模(整除余数)B%A=0 ++自增(+1)A++=11 --自减(-1)A--=9 关系运算符 假设A=10、B=20: 运算符说明示例 ==相等判断(A==B)为假 !=不等判断(A!=B)为真 >大于判断(A>B)为假 <小于判断(A<B)为
存储类别定义变量/函数的作用域(可见性)与生命周期。说明符置于类型之前。C++提供五种存储类别: auto register static extern mutable auto存储类别 所有局部变量的默认存储类别。仅限函数内部使用。示例: { int mount; auto int month; } // 两者等价,均为auto register存储类别 建议将局部变量存入CPU寄存器而非内存,适用于频繁访问的计数器等热点变量。特性: 最大尺寸受限于寄存器大小(通常一个字长)。 不能对其取地址(&操作符),因无内存地址。 仅是建议:编译器视硬件/实现限制决定是否真正置于寄
C++允许在char、int、double基础类型前添加修饰符,以更精确适配场景需求。四大修饰符: signed(有符号) unsigned(无符号) long(长整型) short(短整型) 适用规则: signed、unsigned、long、short均可修饰整数基础类型(int及其变体)。 signed、unsigned可修饰char。 long可修饰double(即long double)。 signed、unsigned可作为long、short的前缀,如unsigned long int。 简写形式:声明unsigned、short、long整数时,可省略int。以下等价
常量指程序运行期间不可更改的固定值,亦称字面量。常量可属于任意基本数据类型,分为:整数、浮点数、字符、字符串、布尔五大类。常量本质是“只读变量”,定义后值不可修改。 整数字面量 支持十进制、八进制(前缀0)、十六进制(前缀0x/0X)。后缀U/u(unsigned)、L/l(long)可组合、大小写不敏感、顺序任意。示例: 212 // 合法 十进制 215u // 合法 unsigned int 0xFeeL // 合法 unsigned long (十六进制) 078 // 非法:8非八进制数字 032UU // 非法:后缀重复
作用域是程序中变量可见的区域。变量声明位置大致三类: 函数/代码块内部 → 局部变量 函数参数定义处 → 形式参数 所有函数外部 → 全局变量 函数与参数详见后续章节,本节聚焦局部与全局变量。 局部变量 声明于函数/块内,仅在该函数/块内可见。外部函数不可见。示例: #include <iostream> using namespace std; int main() { int a, b; // 局部声明 int c; a = 10; b = 20; c = a + b; cout << c; return 0;
变量提供具名存储,程序可操控其值。每个变量拥有特定类型,决定三要素: 内存大小与布局 可存储值的范围 可施加的操作集合 变量名由字母、数字、下划线组成,首字符须为字母或下划线。大小写敏感(C++区分大小写)。 七大基础类型 序号类型与说明 1bool仅存true或false。 2char通常占1字节(8位)。本质是整数类型。 3int机器最自然的整数尺寸(通常4字节)。 4float单精度浮点数。 5double双精度浮点数。 6void表示“无类型”,常用于函数无返回值。 7wchar_t宽字符类型,用于多字节字符集。 C++还支持枚举、指针、数组、引用、数据结构、类等派生/用户定
程序注释是嵌入源码的解释性语句,助力代码阅读者理解意图。所有编程语言均提供注释机制。 C++支持单行注释与多行注释。注释内的所有字符均被编译器忽略。 多行注释 以/*开始,以*/结束。示例: /* This is a comment */ /* C++ comments can also * span multiple lines */ 单行注释 以//开始,延伸至行尾。示例: #include <iostream> using namespace std; int main() { cout << Hello World; // prints Hell
C++程序可视为对象集合,对象间通过调用彼此方法通信协作。先明确四大核心概念: 对象:拥有状态与行为。例:狗有颜色、名字、品种(状态),会摇尾、吠叫、进食(行为)。对象是类的实例。 类:模板/蓝图,定义该类型对象支持的行为与状态。 方法:行为的代码实现。类可包含多个方法,逻辑、数据操作、动作执行均在方法中完成。 实例变量:每个对象拥有独有的实例变量集;对象状态由这些变量的取值决定。 C++程序结构剖析 经典Hello World示例: #include <iostream> using namespace std; // main()是程序入口 int main() {
本地环境准备 搭建C++开发环境,需在电脑安装以下两类软件: 文本编辑器 用于编写源代码。常见选择:Windows记事本、OS Edit、Brief、Epsilon、EMACS、vim/vi等。不同操作系统常用编辑器不同:Windows常用记事本,vim/vi跨平台通用(Windows/Linux/UNIX)。 编辑器创建的文件称源文件,C++通用扩展名为.cpp、.cp或.c。确保编辑器就绪即可起步。 C++编译器 将源代码编译为可执行程序。多数编译器不强制扩展名,默认多用.cpp。最普及的免费编译器是GNU C/C++编译器(GCC);HP、Solaris等系统亦有自带编译器。 安装
C++是一种静态类型、编译型、通用、大小写敏感、自由格式的编程语言,支持过程式、面向对象、泛型三大编程范式。 C++被公认为中级语言,因其融合了高级语言的抽象表达力与低级语言的硬件操控能力。 1979年,Bjarne Stroustrup在贝尔实验室(新泽西默里山)着手开发C++,旨在增强C语言,最初命名“C with Classes”,1983年正式更名为C++。 C++是C的超集:几乎所有合法的C程序均为合法的C++程序。 注:静态类型指类型检查发生在编译期而非运行期。 面向对象编程 C++完整支持面向对象开发的四大支柱: 封装 数据隐藏 继承 多态 标准库三大组件 核心语言:提
执行 C 程序时可从命令行传递值,这些值称为 命令行参数,常用于外部控制程序而非硬编码值。 命令行参数通过 main() 函数参数处理:argc 表示传入参数个数,argv[] 为指针数组,指向各参数。示例检查是否有参数并相应处理: 2) { printf(Too many arguments supplied.\n); } else { printf(One argument expected.\n); } } 编译后以单参数执行: $./a.out testing The argument supplied is testing 两参数执行
本章讲解 C 语言动态内存管理。C 语言提供多个内存分配和管理函数,定义在 <stdlib.h> 头文件中。 序号函数 & 说明 1void *calloc(int num, int size);分配 num 个元素的数组,每个元素大小为 size 字节,并初始化为零。 2void free(void *address);释放 address 指向的内存块。 3void *malloc(size_t size);分配 size 字节内存,不初始化(内容不定)。 4void *realloc(void *address, int newsize);将 address 指向的
有时需要函数接受可变数量的参数,而非预定义固定参数。C 语言提供了解决方案,允许定义接受可变参数的函数。示例定义如下: int func(int, ... ) { ... } int main() { func(1, 2, 3); func(1, 2, 3, 4); } 注意:函数 func() 最后一个参数为省略号(...),其前一个参数必须是 int,表示传入的可变参数总数。使用该功能需包含 stdarg.h 头文件,按以下步骤实现: 定义函数,最后参数为省略号,前一个参数为 int 表示参数个数。 在函数内创建 va_list 类型变量(定义于 stdarg.h
递归是以自我相似方式重复项目的过程。在编程语言中,若程序允许函数在内部调用自身,则称为函数的递归调用。 void recursion() { recursion(); /* 函数调用自身 */ } int main() { recursion(); } C 语言支持递归,即函数可调用自身。但使用递归时,程序员必须小心定义函数的退出条件,否则将陷入无限循环。 递归函数解决多数学问题非常有用,如计算阶乘、生成斐波那契数列等。 数字阶乘 以下示例使用递归函数计算给定数字的阶乘: Live Demo #include <stdio.h> unsigned long lon
C 语言本身不直接提供错误处理机制,但作为系统编程语言,它通过返回值提供底层访问。大多数 C 或 Unix 函数调用出错时返回 -1 或 NULL,并设置全局错误码 errno。errno 为全局变量,指示函数调用期间发生的错误。各种错误码定义在 <error.h> 头文件中。 C 程序员可检查返回值,根据返回值采取相应措施。良好习惯:程序初始化时将 errno 设为 0,值为 0 表示无错误。 errno、perror() 与 strerror() C 语言提供 perror() 和 strerror() 函数,用于显示与 errno 关联的文本信息。 perror() 显示传
将一种数据类型转换为另一种称为类型转换或类型强制转换。例如,要将 long 值存入 int,可将 long 强制转换为 int。使用强制转换运算符显式转换,语法如下: (type_name) expression 以下示例中,强制转换运算符使两个整数变量相除变为浮点运算: Live Demo #include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf(Value of mean : %f\n, mean )
头文件是扩展名为 .h 的文件,包含 C 函数声明和宏定义,供多个源文件共享。头文件分两类:程序员自定义的头文件和编译器自带的系统头文件。 在程序中使用头文件,需通过 C 预处理指令 #include 引入,如你常见的 stdio.h 即为编译器自带的系统头文件。 引入头文件等同于将头文件内容复制到源文件,但直接复制容易出错,且在多源文件项目中并不推荐。通用做法是将常量、宏、系统级全局变量和函数原型放在头文件中,在需要处引入该头文件。 引入语法 用户和系统头文件均使用 #include 指令引入,有两种形式: #include <file> 此形式用于系统头文件。它在标准系统目录列
C 预处理器并非编译器的一部分,而是编译过程中的一个独立步骤。简单来说,C 预处理器只是一个文本替换工具,它指示编译器在实际编译前进行必要的预处理。我们将 C 预处理器简称为 CPP。 预处理器指令 所有预处理器命令都以井号(#)开头。它必须是第一个非空白字符,为了可读性,预处理指令应从第一列开始。下表列出了所有重要的预处理指令: 序号指令 & 说明 1#define定义预处理宏(文本替换)。 2#include插入另一个文件的头文件内容。 3#undef取消已定义的预处理宏。 4#ifdef若宏已定义则为真。 5#ifndef若宏未定义则为真。 6#if测试编译时条件是否为真。 7
C语言