C语言基础级——字符与字符串 转载请标明出处!
文章目录
- C语言基础级——字符与字符串
-
- 字符
- 字符数组
-
- 第一种
- 第二种
- 第三种
- 三者区别
- 字面量后缀
-
- 定义
- 作用
‘字符’,C语言规定字符用单引号(
''
)作为定界符;“字符串”,C语言规定字符用双引号(""
)作为定界符;字符 字符是C语言最基本的元素,C语言字符集由字母、数字、空白、标点和特殊字符组成的。
%c
是字符型占位符。空白字符包括空格符、制表符和换行符。char str = 'a';
printf("%c\n", str);
文章图片
我们再用
%d
整型占位符,看下结果。char str = 'a';
printf("%d\n", str);
文章图片
%c
打印出是 a
字符,%d
打印出是 97
,我们都是打印str
里面所存放的字符,但是结果却不同。这就是通过ASCII
码表与而二进制转换的标准。'a'
对应ASCII码为 97
,'A'
对应ASCII码为 65
,'4'
对应ASCII码为 52
。ASCII码表只需要记住几个常用的,不需要花太多时间背下来。ASCII码总表字符数组 想要用多个字符组成一串,这一长串的字符我们称为字符串。
第一种
char str[] = "abc";
printf("%s\n", str);
文章图片
注意:
- 采用字符数组存放字符串,
%s
能够直接输出数组当中的字符串。 - 字符串结尾处默认添加
'\0'
,'\0'
是空字符,对应ASCII码为0
。
char str[] = {'a', 'b', 'c', '\0'};
注意:
- 需要我们手动添加
'\0'
以代表字符串终止。 printf
函数是从首地址逐字节寻址,直到遇到'\0'
后,结束寻址。- 若字符串
'\0'
不存在,可能会导致因为没有'\0'
而多输出乱码或字符串。所以养成习惯,要加上'\0'
;
- 若字符串
char *str = "abc";
指向字符串(
abc
)的指针。注意:
- 字符串结尾处默认添加
'\0'
,'\0'
是空字符,对应ASCII码为0
。
内存的存储区域不同,且作用方式、声明周期也有所不同。
- 字符是单引号(
''
),字符串是双引号(""
),如果字符串常量用单引号,会报错。 - 字符存储空间
一
个字节,而字符串存储空间是多
个字节。 - 前两种并不是保存在常量区,从常量区拷贝出字符串的副本存放到数组当中,位于内存的栈区,可修改。
#includeint main()
{
#if 1
// 打印原来的字符串
char str[] = "hello";
printf("str[] = %s\n", str);
// 打印修改后的字符串
str[0] = 'w';
printf("str[] = %s\n", str);
#endif#if 0
// 打印原来的字符串
char str_1[] = {'h', 'e', 'l', 'l', 'o', '\0'};
printf("str_1[] = %s\n", str_1);
// 打印修改后的字符串
str_1[0] = 'w';
printf("str_1[] = %s\n", str_1);
#endif
return 0;
}
文章图片
- 第三种相当于指针里存放着
"abc"
的地址,通过寻址方式找到"abc"
,无法直接通过指针修改常量区,它是只读。一旦修改,就会报段错误。
#includeint main()
{
// 打印原来的字符串
char *str_2 = "hello";
printf("str_1[] = %s\n", str_2);
// 打印修改后的字符串
str_2[0] = 'w';
printf("str_1[] = %s\n", str_2);
return 0;
}
文章图片
字面量后缀 定义
实际上字符串更严谨地称为字符串字面量,例如:
"hello"
"Home\n"
。字面量又有很多种,整型字面量、浮点型字面量、字符型字面量…
字面量后面,我们都会增加一个后缀标记类型:
- 长整型字面量,后加一个
l
或L
,例如:1234L
- 八进制前面加
0
,例如:031
- 十六进制前面加
0x
或0X
,例如:0x33
、0X33
- 八进制前面加
- 无符号字面量,后加一个
u
或U
,例如:123U
- 单精度浮点型字面量,后加一个
f
或F
,例如:1.23F
- 不增加后缀的浮点型字面量,都为双精度浮点型字面量。例如:
1.23
- 在我们做数学运算过程当中,为了统一每个运算的数据类型,我们通常都会加上对应的后缀标记类型。
float sum = 2.0F * 3.0F * 4.0F;
【C语言基础|C语言基础级——字符与字符串】如果不加上,会导致计算出来的结果,精度上有误差。
推荐阅读
- 字符串|深入正则表达式(3):正则表达式工作引擎流程分析与原理释义
- scala|Scala:正则表达式详解
- C语言的常量|C语言的常量,字符串,转义字符,注释你都了解吗
- c语言|C语言进阶(五)——字符串+内存函数的介绍
- c语言|C语言中,C进阶中字符函数、字符串函数、内存函数详解。
- linux|linux sha1 字符串,linux sha1 实现
- C语言|C语言求输入字符的字母和数字个数
- 编程题|C语言——动态分配数组malloc的使用及读走回车换行符问题
- C语言基础|【C语言趣味游戏】猜数字