【C语言入门】C语言常见基础必懂概念(二)字符篇

简介: 【C语言入门】C语言常见基础必懂概念(二)字符篇

一、字符 和 ASCII编码

在键盘上可以敲出各种字符,如:aq@# 等,这些符号都被称为 字符

语法:C语⾔中字符是用单引号括起来的,如:‘a’,‘b’,‘@’。

我们知道在 计算机中所有的数据 都是以 二进制 的形式存储的,那这些字符在内存中分别以什么样的⼆

进制存储的呢?

如果我们每个⼈自己给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了方便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个 标准 ASCII 编码 ,C语言中的字符就遵循了 ASCII 编码的方式。



二、ASCII码

我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:

★☆★

  • 字符 A ~ Z 的 ASCII码值 从 65 ~ 90
  • 字符 a~z 的 ASCII码值 从 97 ~ 122
  • 对应的 大小写字符 (a和A)的ASCII码值的 差值32
  • 数字字符 0 ~ 9 的ASCII码值从 48 ~ 57
  • 换行 \n 的ASCII值是:10
  • 在这些字符中ASCII码值从 0~3132个字符不可打印字符无法打印在屏幕上观察


单个字符的打印可以使⽤ %c 来指定格式 :

#include <stdio.h>
int main()
{
 printf("%c\n", 'Q');
 printf("%c\n", 81);   //这⾥的 81 是 字符Q 的 ASCII码值 ,也是 可以正常打印 的
 return 0;
}

可打印字符 展示 :

#include <stdio.h>
int main()
{
 int i = 0;
 for (i = 32; i <= 127; i++)
 {
     printf("%c ", i);
     if (i % 16 == 15){
       printf("\n");
     }
 return 0;
}



三、字符串和\0

C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:“abcdef”,就是⼀个字符串。

字符串的打印格式可以使⽤ %s来指定,也可以直接打印如下:

#include <stdio.h>
int main()
{
 printf(" %s \n", "hello C");
 printf("hello c");
 return 0;
}

C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志

对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0的转义字符\0 是字符串的结束标志。所以我们在使用 库函数 printf() 打印字符串 或者 strlen() 计算字符串长度 的时候,遇到 \0 的时候就自动停止了。


C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们在这里利用下面的代码验证⼀下 \0 的功能。

#include <stdio.h>
int main()
{
 char arr1[] = {'a', 'b', 'c'};//arr1数组中存放3个字符
 char arr2[] = "abc"; //arr2数组中存放字符串
 printf("%s\n", arr1);
 printf("%s\n", arr2);
 return 0;
}

调试观察 arr1 和arr2 的内容:

运行结果

结果分析:

我们可以看到, arr1 字符数组在打印的时候,打印了 a 、 b 、 c 后还打印了⼀些随机值,这就是因为 arr1 在末尾的地⽅没有 \0 字符作为结束标志,在打印的时候没有停⽌

但是 arr2 的打印就是完全正常的,就是因为 arr2 数组是使⽤字符串常量初始化的,数组中有 \0作为技术标志,打印可以正常停止。


★☆★ \0字符串停止 作用

#include <stdio.h>
int main()
{
 char arr1[] = {'a', 'b', 'c', '\0'};
 char arr2[] = "abc";
 printf(" %s \n", arr1);
 printf(" %s \n", arr2);
 printf(" %s \n", "abc\0def");
 return 0;
}

四、转义字符

字符中有⼀组特殊的字符是转义字符。

转义字符顾名思义:转变原来的意思的字符

⽐如:我们有字符 n ,在字符串中打印的时候⾃然能打印出这个字符,如下:

#include <stdio.h>
int main()
{
 printf("abcndef");
 return 0;
}

输出的结果:

如果我们修改⼀下代码,在 n 的前⾯加上 \ ,变成如下代码:

#include <stdio.h>
int main()
{
 printf("abc\ndef");
 return 0;
}

输出的结果:

我们可以看到修改的前后代码输出的结果,截然不同的,那这是为什么呢?

这就是转义字符的问题, \n 是⼀个转义字符表示换行的意思,我们可以简单的理解为 \n 的意思发生了转变n 本来是⼀个普通的字符,被\转义为换行的意思。


C语言中像这样的转义字符还有⼀些,具体如下:

  • \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
  • \' :⽤于表⽰字符常量’
  • \" :⽤于表⽰⼀个字符串内部的双引号
  • \\ :⽤于表⽰⼀个反斜杠,防止它被解释为⼀个转义序列符
  • \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
  • \b :退格键,光标回退⼀个字符,但不删除字符。
  • \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
  • \n :换⾏符。
  • \r :回⻋符,光标移到同⼀⾏的开头
  • \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。
  • \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
    下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
  • \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
  • \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0

\0null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其ASCII码值是0.

代码演示:

#include <stdio.h>
int main()
{
 printf("%c\n", '\'');
 printf("%s\n", "\"");
 printf("c:\\test\\code\\test.c\n");
 printf("\a");
 printf("%c\n", '\130'); //130是8进制,转换成10进制是88,以88作为ASCII码值的字符是
 printf("%c\n", '\x30'); //x30中的30是16进制,转换成10进制是48,以48作为ASCII码值的
 return 0;
}

这些ASCII码值是可以自己写代码验证的,⼤家也可以自己验证。

关于转义字符我们首先要了解,然后要能在字符串中识别出来。

转义字符参考:https://zh.cppreference.com/w/c/language/escape

目录
相关文章
|
12天前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
36 4
|
12天前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
31 1
|
1月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
104 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
1月前
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
189 11
|
1月前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
48 6
|
2月前
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
79 5
|
3月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
3月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
12天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
51 23
|
12天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
43 15

热门文章

最新文章