15 C 语言字符类型详解:转义字符、格式化输出、字符类型本质、ASCII 码编程实战、最值宏汇总

1 字符类型概述

        在 C 语言中,字符类型 char 用于表示单个字符,例如一个数字、一个字母或一个符号。

        char 类型的字面量是用单引号括起来的单个字符,例如 'A'、'5' 或 '#'。

        当需要表示多个字符组成的序列时,就涉及到了字符串。在 C 语言中,字符串是通过 char 数组来实现的,数组属于构造类型,而非基本数据类型。关于数组和字符串的详细内容,我们将在后续章节专门讲解。

// 定义并初始化 char 类型变量
char letter = 'A';   // 字母
char digit = '5';    // 数字
char symbol1 = '#';  // 符号
char symbol2 = '\n'; // 转义字符,换行符// 错误定义:不是单个字符
// char letters = 'AB'; // 错误:字符常量只能包含一个字符
// char digits = '12';  // 错误:字符常量只能包含一个字符
// char symbols = '#$'; // 错误:字符常量只能包含一个字符
// char chinese = '中'; // 错误:一个汉字字符在 UTF-8 编码中占用多个字节// 可以通过后续学习字符串来存储多个字符
// char str1[] = "Hello"; // 正确:字符串常量可以包含多个字符

2 转义字符

        在 C 语言中,可以使用以反斜杠 \ 开头的转义字符来表示一些具有特殊含义的字符。这些转义字符为程序提供了处理特殊字符和格式化输出的能力。

2.1 常见转义字符说明

        以下是常见的转义字符及其说明:

转义字符字符名称说明
\n换行符将光标移动到下一行的开头(换行),两个 \n 表示空一行
\t水平制表符插入一个水平制表符(通常等效于 4 或 8 个空格,具体取决于实现)
\\反斜杠字符由于反斜杠在 C 语言中用作转义字符的引导,所以表示它自身时需要使用两个反斜杠
\'单引号字符因为在 C 语言中字符常量是由单引号括起来的,所以要在字符串中表示单引号,就需要使用转义字符
\"双引号字符因为 C 语言中的字符串是由双引号括起来的,所以要在字符串中表示双引号,就需要使用转义字符
\a响铃(BEL)字符产生声音或可视信号(具体效果取决于系统和终端)
\b退格符将光标向左移动一个位置(可能删除左侧字符,具体行为依赖实现)
\f换页符将光标移动到下一页的开头(具体效果取决于系统和终端)
\r回车符将光标移动到当前行的开头(可能覆盖已有内容,不换行)
\v垂直制表符在垂直方向上移动光标(效果因系统而异)
\ooo八进制转义序列用 1 到 3 位八进制数字(0~7)表示字符,示例:\101 → 八进制 101(十进制 65)→ 字符 'A'
注意:位数不足 3 时,编译器按实际八进制值解析(如 \12 等价于 \012,表示换行符 \n)
\xhh十六进制转义序列用 1 到多位十六进制数字(0~9、A~F、a~f)表示字符,示例:\x41 → 十六进制 41(十进制 65)→ 字符 'A'
注意:通常用 2 位表示 ASCII 字符(如 \x41),但长度灵活(如 \x1F600 表示 Unicode 笑脸 😀)
  • 某些转义字符(如 \a、\b、\f、\v)的效果可能因终端或系统而异。
  • 八进制和十六进制转义序列直接对应 ASCII 码,可通过查表验证输出

扩展:转义字符中的 \r(回车)与 \n(换行)

  1. 起源与功能
    • \r(回车):将光标移回行首(打字机时代功能),不换行。
    • \n(换行):将光标移到下一行(纸张滚动功能),不移动行首位置。
  2. 系统差异
    • Unix/Linux/macOS:仅用 \n 表示换行。
    • Windows:传统用 \r\n 组合,但现代工具兼容 \n(网络协议仍需 \r\n)。
  3. C 语言中的抽象
    • C 语言统一用 \n 表示换行,实际行为由系统底层决定(如 Unix 直接换行,Windows 可能转换为 \r\n)。

2.2 案例演示

        以下是一个 C 程序,演示了上表中所列出的转义字符的用法,并附有详细注释:

#include <stdio.h>int main()
{// 1. 换行符 \n:将光标移动到下一行的开头(换行)printf("这是第一行\n这是第二行\n\n"); // 两个 \n 表示空一行// 2. 水平制表符 \t:插入一个水平制表符(通常等效于 4 或 8 个空格,具体取决于实现)printf("姓名:\t张三\n年龄:\t25\n\n");// 3. 反斜杠字符 \\:表示一个反斜杠本身printf("路径示例: C:\\\\Program Files\\\n\n"); // 路径示例: C:\\Program Files\// 4. 单引号字符 \':在字符常量中表示单引号printf("单引号示例: \'A\'\n\n"); // 单引号示例: 'A'// 5. 双引号字符 \":在字符串中表示双引号printf("双引号示例: \"Hello\"\n\n"); // 双引号示例: "Hello"// 6. 响铃字符 \a:产生声音或可视信号(具体效果取决于系统和终端)printf("响铃提示:\a 请注意!\n\n");// 7. 退格符 \b:将光标向左移动一个位置(可能删除左侧字符,具体行为依赖实现)printf("退格示例: 12\b3\n\n"); // 输出可能为 "13",因为 \b 可能会删除左侧的字符 '2'// 8. 换页符 \f:将光标移动到下一页的开头(具体效果取决于系统和终端)printf("第一页\f这是第二页的内容\n\n");// 9. 回车符 \r:将光标移动到当前行的开头(可能覆盖已有内容,不换行)printf("123\r456\n\n"); // 输出 "456",因为 \r 覆盖了前面的 "123"// 10. 垂直制表符 \v:在垂直方向上移动光标(效果因系统而异)printf("垂直制表符:\v新行1\v新行2\n\n");// 11. 八进制转义序列 \ooo:用 1 到 3 位八进制数字(0~7)表示字符printf("八进制示例: \101\n");   // \101 对应 ASCII 码 65,即 'A'printf("八进制示例: \12\n");    // \12 对应 ASCII 码 10,即换行符 \nprintf("八进制示例: \141\n\n"); // \141 对应 ASCII 码 97,即 'a'// 12. 十六进制转义序列 \xhh:用 1 到多位十六进制数字(0~9、A~F、a~f)表示字符printf("十六进制示例: \x41\n"); // \x41 对应 ASCII 码 65,即 'A'printf("十六进制示例: \x0A\n"); // \x0A 对应 ASCII 码 10,即换行符 \nprintf("十六进制示例: \x61\n"); // \x61 对应 ASCII 码 97,即 'a'return 0;
}

        程序在 VS Code 中的运行结果如下所示:

2.3 单双引号转义使用要点

        在 C 语言中,字符串是由双引号 " " 括起来的字符序列。当我们需要在字符串中合理使用单引号和双引号时,需要遵循特定规则:

  • 单引号在字符串中的使用:在由双引号包围的字符串内部,可以直接使用单引号,无需进行转义。因为单引号在这里被当作字符串的普通字符内容,而非界定字符常量的符号。例如:
printf("This is a 'character' inside a string.\n");
// 输出结果:This is a 'character' inside a string.

        上述代码执行后,会正常输出字符串,其中单引号会被当作字符串的一部分输出,输出结果为:This is a 'character' inside a string.

  • 双引号在字符串中的使用:由于双引号本身用于界定字符串的开始和结束,所以不能直接在双引号界定的字符串内部使用另一个未转义的双引号。若要在字符串中包含双引号字符,必须使用转义字符 \ 对其进行转义。经过转义后,紧随转义字符的双引号就会被视为字符串的一部分,而非字符串的结束标志。如下图所示:


3 字符类型格式占位符

        在 C 语言中,使用格式化输出函数(如 printf)时,针对 char 类型的数据,有不同的格式占位符来满足不同的输出需求:

  • 使用 %c 格式化占位符,可以直接输出 char 类型的字符本身。例如,printf("%c", 'a'); 会输出字符 a。
  • 使用 %d 格式化占位符,可以输出该字符对应的 ASCII 码值。例如,printf("%d", 'a'); 会输出 97,即字符 'a' 在 ASCII 码表中的十进制数值。
#include <stdio.h>int main()
{// 定义一个字符变量char c = 'a';// 使用 %c 输出字符本身printf("使用 %%c 输出字符: %c\n", c); // 输出: a// 使用 %d 输出字符对应的 ASCII 码值printf("使用 %%d 输出 ASCII 码值: %d\n", c); // 输出: 97return 0;
}

        程序在 VS Code 中的运行结果如下所示:


4 字符类型的本质

        在 C 语言中,char 类型本质上是一个整数类型,它对应着 ASCII 码表中的数字,其存储长度固定为 1 个字节(8 位)

        字符型可进一步细分为 signed char(有符号字符类型)unsigned char(无符号字符类型)

  • signed char 的取值范围是 -128 到 127
  • unsigned char 的取值范围是 0 到 255

        在实际使用中,char 类型默认是否带符号取决于当前的运行环境

        可通过 <limits.h> 头文件中的宏定义直接获取取值范围:

  • SCHAR_MIN / SCHAR_MAX:signed char 的最小 / 最大值
  • UCHAR_MAX:unsigned char 的最大值(最小值固定为 0)

        字符型数据在存储和读取过程中,会涉及到 ASCII 码的转换。例如,字符 'a' 在 ASCII 码表中对应的十进制数字是 97,在存储时以二进制形式存储,读取时再根据 ASCII 码表还原为字符 'a'。具体过程可参考下图:

#include <stdio.h>
#include <limits.h> // 用于获取字符类型的范围int main()
{// 1. 验证 char 类型的存储长度printf("char 类型的存储长度: %zu 字节\n", sizeof(char)); // 输出: 1 字节// 2. 输出 signed char 和 unsigned char 的范围printf("signed char 范围: %d 到 %d\n", SCHAR_MIN, SCHAR_MAX); // -128 到 127printf("unsigned char 范围: 0 到 %u\n", UCHAR_MAX);           // 0 到 255// 3. 演示 char 类型的整数特性(ASCII 码值)char c = 'A';                                  // 字符 'A' 对应 ASCII 码 65printf("字符 '%c' 的 ASCII 码值: %d\n", c, c); // 输出: 65// 3.1 通过整数操作修改字符,验证 char 类型的整数特性c = c + 1;                                                  // ASCII 码值 +1,'A' -> 'B'printf("修改后的字符(+1): '%c'(ASCII 码值: %d)\n", c, c); // 输出: 'B' 和 66c = c - 1;                                                  // ASCII 码值 -1,'B' -> 'A'printf("修改后的字符(-1): '%c'(ASCII 码值: %d)\n", c, c); // 输出: 'A' 和 65// 3.2 定义 unsigned char 类型变量,存储整数值,验证 char 类型的整数特性unsigned char d = 67; // 存储 ASCII 码值 67,对应字符 'C'// char 类型整数字面量没有后缀形式,这里的 67 其实是 int 类型,编译器进行了隐式类型转换printf("字符 '%c'(ASCII 码值: %d)\n", d, d); // 输出: 'C' 和 67// 3.3 定义 int 类型数据,存储整数值,验证 char 类型的整数特性int i = 68;printf("字符 '%c'(ASCII 码值: %d)\n", i, i); // 输出: 'D' 和 68return 0;
}

        程序在 VS Code 中的运行结果如下所示:


5 整数/浮点/字符类型的最值宏汇总

        在 C 语言中,可以通过引入头文件 <limits.h>(整数 / 字符类型)和 <float.h>(浮点数类型),使用宏定义来获取各种类型的取值范围。以下是分类总结:

5.1 整数类型(包括 char)

        需引入头文件:#include <limits.h>

        最值宏名称及其含义:

类型宏定义含义示例值(32 位系统)
charCHAR_MIN / CHAR_MAX默认 char 的最小 / 最大值(符号性取决于环境)依赖编译器(可能是 -128 到 127 或 0 到 255
signed charSCHAR_MINsigned char 的最小值-128
SCHAR_MAXsigned char 的最大值127
unsigned charUCHAR_MAXunsigned char 的最大值255
shortSHRT_MINshort 的最小值-32768
SHRT_MAXshort 的最大值32767
unsigned shortUSHRT_MAXunsigned short 的最大值65535
intINT_MINint 的最小值-2147483648
INT_MAXint 的最大值2147483647
unsigned intUINT_MAXunsigned int 的最大值4294967295
longLONG_MINlong 的最小值依赖系统(如 -2147483648
LONG_MAXlong 的最大值依赖系统(如 2147483647
unsigned longULONG_MAXunsigned long 的最大值依赖系统(如 4294967295
long longLLONG_MINlong long 的最小值-9223372036854775808
LLONG_MAXlong long 的最大值9223372036854775807
unsigned long longULLONG_MAXunsigned long long 的最大值18446744073709551615

5.2 浮点数类型

        需引入头文件:#include <float.h>

        最值宏名称及其含义:

类型宏定义含义示例值(IEEE 754 标准)
floatFLT_MIN最小正规范化值(非零最小值)1.175494e-38
FLT_MAX最大有限值3.402823e+38
FLT_EPSILON机器 epsilon(最小可表示差值)
即 1.0 与比 1.0 大的最小可表示单精度浮点数之间的差值,用于判断单精度浮点数的近似相等性或分析数值稳定性
1.192093e-7
doubleDBL_MIN最小正规范化值(非零最小值)2.225074e-308
DBL_MAX最大有限值1.797693e+308
DBL_EPSILON机器 epsilon(最小可表示差值)
即 1.0 与比 1.0 大的最小可表示双精度浮点数之间的差值,用于双精度浮点数的误差分析和比较
2.220446e-16
long doubleLDBL_MIN最小正规范化值(非零最小值)依赖系统(如 3.362103e-4932
LDBL_MAX最大有限值依赖系统(如 1.189731e+4932
LDBL_EPSILON机器 epsilon(最小可表示差值)
即 1.0 与比 1.0 大的最小可表示长双精度浮点数之间的差值,用于长双精度浮点数的高精度计算
依赖系统(如 1.084202e-19
  • 机器 epsilon 是浮点数格式的最小上界,使得 1.0 + ε > 1.0 为真。它反映了浮点数的相对精度。典型用途如下:
    • 浮点数比较(判断近似相等性)。
    • 数值算法的误差分析。
    • 避免浮点运算中的累积误差问题。

6 ASCII 码

        ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种用于表示文本字符的字符编码标准。它总共规定了 128 个字符的编码。

        在 ASCII 码体系中,不同字符对应着特定的十进制和二进制编码。例如:

  • 空格字符 “SPACE” 的 ASCII 码值为 32,其二进制表示为 0010 0000。
  • 数字字符 0 的 ASCII 码值为 48,二进制表示为 0011 0000。
  • 大写字母 A 的 ASCII 码值为 65,二进制表示为 0100 0001。
  • 小写字母 a 的 ASCII 码值为 97,二进制表示为 0110 0001。

        通过 ASCII 码,计算机能够以统一的方式存储、处理和传输文本字符,确保不同系统之间文本信息的准确交互。


7 编程练习

7.1 字符输出与格式化

        定义三个 char 变量,分别存储字母、数字和符号,然后使用 printf 格式化输出它们的值和 ASCII 码。

#include <stdio.h>int main()
{char letter = 'B';char digit = '7';char symbol = '@';printf("字母: %c (ASCII: %d)\n", letter, letter); // 字母: B (ASCII: 66)printf("数字: %c (ASCII: %d)\n", digit, digit);   // 数字: 7 (ASCII: 55)printf("符号: %c (ASCII: %d)\n", symbol, symbol); // 符号: @ (ASCII: 64)return 0;
}

        程序在 VS Code 中的运行结果如下所示:

7.2 固定字母大小写转换

        定义一个 char 变量存储大写字母 'A',通过算术运算将其转换为小写字母 'a' 并输出。再定义一个 char 变量存储小写字母 'z',通过算术运算将其转换为大写字母 'Z' 并输出。

#include <stdio.h>int main()
{// 大写字母 'A' 转小写字母 'a'char upper = 'A';upper = upper + 32;                         // ASCII 码 +32printf("大写 'A' 转换为小写: %c\n", upper); // 输出 'a'// 小写字母 'z' 转大写字母 'Z'char lower = 'z';lower = lower - 32;                         // ASCII 码 -32printf("小写 'z' 转换为大写: %c\n", lower); // 输出 'Z'return 0;
}
  • 掌握大小写字母的转换方法(大写字母的 ASCII 码 +32 得到小写字母,反之 -32)。 

        程序在 VS Code 中的运行结果如下所示:

7.3 字符与数字的混合运算

  • 定义一个 char 变量存储数字字符 '5',通过算术运算将其转换为整数 5 并输出。
  • 定义一个 int 变量存储整数 3,通过算术运算将其转换为字符 '3' 并输出。
  • 对字符 '5' 和整数 3 进行混合运算(如相加),并分别以字符和整数形式输出结果。
#include <stdio.h>int main()
{// 数字字符 '5' 转整数 5char digit_char = '5';int digit_int = digit_char - '0';                            // ASCII 码相减printf("字符 '%c' 对应的整数: %d\n", digit_char, digit_int); // 输出 5// 整数 3 转字符 '3'int num = 3;char num_char = num + '0';                         // ASCII 码相加printf("整数 %d 对应的字符: %c\n", num, num_char); // 输出 '3'// 混合运算char mixed_char = digit_char + num; // '5' + 3 = '8'// 以 %c 和 %d 输出结果printf("混合运算结果(字符:): %c\n", mixed_char); // 输出 '8'printf("混合运算结果(整数:): %d\n", mixed_char); // 输出 56(53+3)return 0;
}

        程序在 VS Code 中的运行结果如下所示:

7.4 字符的对称转换

        定义一个 char 变量存储字母 'd',通过算术运算将其转换为字母表中对称的字母(如 'a' ↔ 'z','b' ↔ 'y','c' ↔ 'x','d' ↔ 'w')并输出。

#include <stdio.h>int main()
{char c = 'd';// 计算对称字母:'a' + ('z' - c)c = 'a' + ('z' - c);printf("字母 '%c' 的对称字母: %c\n", 'd', c); // 输出 'w'return 0;
}
  • 对称字母 = 字母表起始位置 + (字母表末尾位置 - 当前字母位置)

        程序在 VS Code 中的运行结果如下所示:

7.5 字符的循环偏移

        定义一个 char 变量存储字母 'X',通过算术运算将其转换为字母表中后第 5 个字母(如 'X' → 'C',注意字母表的循环)。

#include <stdio.h>int main()
{char c = 'X';// 计算循环偏移:((c - 'A' + 5) % 26) + 'A'// % 是求余数运算符c = ((c - 'A' + 5) % 26) + 'A';printf("字母 '%c' 后第 5 个字母(循环): %c\n", 'X', c); // 输出 'C'return 0;
}
  • 偏移后字母 = 'A' + ((当前字母位置 + 偏移量) % 26) 
    • c - 'A':将字母转换为 0 到 25 的位置。
    • + n:向后偏移 n 个位置。
    • % 26:处理字母表的循环(超过 'Z' 时回到 'A')。
    • + 'A':将位置转换回 ASCII 字符。

        程序在 VS Code 中的运行结果如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统-锁/内存/中断/IO

文章目录 锁自旋锁互斥锁悲观锁和乐观锁 内存管理物理/虚拟内存页表段表虚拟内存布局写时复制copy on writebrk&#xff0c;mmap页面置换算法 中断中断分类中断流程 网络I/OI/O模型服务器处理并发请求 锁 自旋锁 自旋锁是一种基于忙等待&#xff08;Busy-Waiting&#xff09;…

割点与其例题

割点 定义&#xff1a; 若一个点在图中被去掉后&#xff0c;图的连通块个数增加&#xff0c;那么这个点就被称为“割点”。如下图所示红点。 定义说白了就是若去掉一个点&#xff0c;图被“断开”的点称为割点。 朴素算法&#xff1a; 枚举每个点 u。遍历图&#xff0c;如果…

图卷积神经网络(Graph Convolutional Network, GCN)

最近看论文看到了图卷积神经网络的内容&#xff0c;之前整理过图神经网络的内容&#xff0c;这里再补充一下&#xff0c;方便以后查阅。 图卷积神经网络&#xff08;Graph Convolutional Network, GCN&#xff09; 图卷积神经网络1. 什么是图卷积神经网络&#xff08;GCN&#…

安装win11硬盘分区MBR还是GPT_装win11系统分区及安装教程

最近有网友问我,装win11系统分区有什么要求装win11系统硬盘分区用mbr还是GPT&#xff1f;我们知道现在的引导模式有uefi和legacy两种引导模式&#xff0c;如果采用的是uefi引导模式&#xff0c;分区类型对应的就是gpt分区(guid)&#xff0c;如果引导模式采用的是legacy&#xf…

服务培训QDA 的安装调试方法,硬件模块的讲解和软件控制台使用及系统测试

#服务培训##质谱仪##软件控制##硬件模块# 以下是关于Waters QDa单杆液质质谱仪的安装调试、硬件模块讲解以及软件控制台使用培训的相关内容&#xff1a; 安装调试 场地准备&#xff1a;用户需要提前准备好实验室&#xff0c;确保实验室环境符合仪器的要求&#xff0c;如温度、…

在K8S集群中部署EFK日志收集

目录 引言环境准备安装自定义资源部署ElasticsearchMaster 节点与 Data 节点的区别生产优化建议安装好以后测试ES是否正常部署Fluentd测试filebeat是否正常推送日志部署Kibana获取账号密码&#xff0c;账号是&#xff1a;elastic集群测试 引言 系统版本为 Centos7.9内核版本为…

polarctf-web-[rce1]

考点&#xff1a; (1)RCE(exec函数) (2)空格绕过 (3)执行函数(exec函数) (4)闭合(ping命令闭合) 题目来源&#xff1a;Polarctf-web-[rce1] 解题&#xff1a; 这段代码实现了一个简单的 Ping 测试工具&#xff0c;用户可以通过表单提交一个 IP 地址&#xff0c;服务器会执…

【串流VR手势】Pico 4 Ultra Enterprise 在 SteamVR 企业串流中无法识别手势的问题排查与解决过程(Pico4UE串流手势问题)

写在前面的话 此前&#xff08;用Pico 4U&#xff09;接入了MRTK3&#xff0c;现项目落地需要部署&#xff0c;发现串流场景中&#xff0c;Pico4UE的企业串流无法正常识别手势。&#xff08;一体机方式部署使用无问题&#xff09; 花了半小时解决&#xff0c;怕忘&#xff0c;…

ES(Elasticsearch)的应用与代码示例

Elasticsearch应用与代码示例技术文章大纲 一、引言 Elasticsearch在现代化应用中的核心作用典型应用场景分析&#xff08;日志分析/全文检索/数据聚合&#xff09; 二、环境准备(前提条件) Elasticsearch 8.x集群部署要点IK中文分词插件配置指南Ingest Attachment插件安装…

临床决策支持系统的提示工程优化路径深度解析

引言 随着人工智能技术在医疗领域的迅猛发展,临床决策支持系统(CDSS)正经历从传统规则引擎向智能提示工程的范式转变。在这一背景下,如何构建既符合循证医学原则又能适应个体化医疗需求的CDSS成为医学人工智能领域的核心挑战。本报告深入剖析了临床决策支持系统中提示工程的…

火山RTC 8 SDK集成进项目中

一、SDK 集成预备工作 1、SDK下载 https://www.volcengine.com/docs/6348/75707 2、解压后 3、放在自己项目中的位置 1&#xff09;、include 2&#xff09;、lib 3)、dll 暂时&#xff0c;只需要VolcEngineRTC.dll RTCFFmpeg.dll openh264-4.dll&#xff0c; 放在intLive2…

OkHttp用法-Java调用http服务

特点&#xff1a;高性能&#xff0c;支持异步请求&#xff0c;连接池优化 官方文档&#xff1a;提供快速入门指南和高级功能&#xff08;如拦截器、连接池&#xff09;的详细说明&#xff0c;GitHub仓库包含丰富示例。 社区资源&#xff1a;中文教程丰富&#xff0c;GitHub高…

python中常用的参数以及命名规范

以下是 Python 中常见的命名规范、参数用法及在大型项目中常用的操作模式&#xff0c;供记录参考&#xff1a; 1. 命名规范&#xff08;Naming Conventions&#xff09; 前缀/形式含义示例_age单下划线&#xff1a;弱“私有”标记&#xff08;可访问但不建议外部使用&#xff…

第五十七篇 Java接口设计之道:从咖啡机到智能家居的编程哲学

目录 引言&#xff1a;生活中的接口无处不在一、咖啡机与基础接口&#xff1a;理解抽象契约1.1 咖啡制作的标准接口 二、智能家居与策略模式&#xff1a;灵活切换实现2.1 温度调节策略场景 三、物流系统与工厂模式&#xff1a;标准接口下的多样实现3.1 快递运输接口设计 四、健…

第二十六天打卡

全局变量 global_var 全局变量是定义在函数、类或者代码块外部的变量&#xff0c;它在整个程序文件内都能被访问。在代码里&#xff0c; global_var 就是一个全局变量&#xff0c;下面是相关代码片段&#xff1a; print("\n--- 变量作用域示例 ---") global_var …

联合查询

目录 1、笛卡尔积 2、联合查询 2.1、内连接 2.2、外连接 1、笛卡尔积 笛卡尔积&#xff1a; 笛卡尔积是让两个表通过排列组合的方式&#xff0c;得到的一个更大的表。笛卡尔积的列数&#xff0c;是这两个表的列数相加&#xff0c;笛卡尔积的行数&#xff0c;是这两个表的行…

【HTML5学习笔记2】html标签(下)

1表格标签 1.1表格作用 显示数据 1.2基本语法 <table><tr> 一行<td>单元格1</td></tr> </table> 1.3表头单元格标签 表头单元格会加粗并且居中 <table><tr> 一行<th>单元格1</th></tr> </table&g…

window 显示驱动开发-分页视频内存资源

与 Microsoft Windows 2000 显示驱动程序模型不同&#xff0c;Windows Vista 显示驱动程序模型允许创建比可用物理视频内存总量更多的视频内存资源&#xff0c;然后根据需要分页进出视频内存。 换句话说&#xff0c;并非所有视频内存资源都同时位于视频内存中。 GPU 的管道中可…

《C 语言指针高级指南:字符、数组、函数指针的进阶攻略》

目录 一. 字符指针变量 二. 数组指针变量 三. 二维数组传参 3.1 二维数组的本质 3.2 访问方式与地址计算 3.3 二维数组的传参方式 3.4 深入解析 *(*(arri)j) 与 arr[i][j] 的等价性 四. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针变量的使用 4.3 两段"…

Unity:场景管理系统 —— SceneManagement 模块

目录 &#x1f3ac; 什么是 Scene&#xff08;场景&#xff09;&#xff1f; Unity 项目中的 Scene 通常负责什么&#xff1f; &#x1f30d; 一个 Scene 包含哪些元素&#xff1f; Scene 的切换与管理 &#x1f4c1; 如何创建与管理 Scenes&#xff1f; 什么是Scene Man…