【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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值