概述
种一棵树最好的时间是十年前,其次是现在 !
之前学习过数组,相信你已经耳闻过字符数组这一词了吧!下面我们来学习了解一下C语言的字符串常量(C语言中称为字符串字面量)和字符变量。
一、字符串字面量
1.字符串字面量中的转义序列
字符串字面量也可以包含转义序列(n等等转义序列)。注意:十六进制和八进制数的转义序列较为复杂,要小心使用!
例如:
"hellonworldn"
输出就是:hello
world
2.延续字符串变量
有时候字符串字面量太长而不能单独放一行,通常就会在最后放一个 结尾,那么C语言就可以在下一行继续输入。但是这样缩进效果就看着不明显了,例子如下:
#include<stdio.h>
int main(void)
{
printf("ABCDE
FGHIn");
printf("abcde
fghin");
printf("123"
"456n");
}
可以看到,使用 时如果想要把字符串连续在一块输出就没有办法保证缩进格式,所以有一种办法来延续字符串字面量,即"..." "..."两个连起来就可以合并为同一条字符串。
3.储存字符串字面量:
本质上来说,C语言是把字符串字面量当做字符数组来处理的。(但是字符数组不是字符串!字符串最后会有一个 !)
当C语言中出现长度为n的字符串字面量时,C语言就会为它分配一个长度为 n+1 的空间! 这块内存是用来储存字符串字面量中的字符,而多出来的一个空间是用来标志字符串末尾的额外字符(空字符)这个 就是字符串字面量结束的标志,用转义字符 代替,注意:不是 '0',空字符的码值为0,而零字符的ASCII码为48。
例如:字符串字面量"abc"是作为有4个字符的数组来储存的(a、b、c、 )
字符串字面量" "(字符串字面量可以为空。且单独一个空字符储存 即 )
那么我们使用字符串字面量为printf函数传参时是传递了什么呢?既然是当做数组处理了,那么编译器自然就把他看做成char * 类型的指针。
例如:printf("abc");
当调用printf函数时,会传递"abc"的地址(即指向储存字母a的内存单元的指针)
来看一下下面的代码及其运行结果
#include<stdio.h>
int main()
{
char *a,*b,c;
a = "abc";
b = "";
c = '0';
printf("a = %sn",a);
printf("b[0] = %dn",b[0]);
printf("b = %sn",b);
printf("c = %cn",c);
return 0;
}
""空字符串中只有一个元素 ,它就是整数0,但不是字符常量'0'!!!
4.字符串字面量的操作
刚才我们看到了这样的代码
#include<stdio.h>
int main()
{
char *a,*b,c;
a = "abc";
b = "";
c = '0';
printf("a = %sn",a);
printf("b[0] = %dn",b[0]);
printf("b = %sn",b);
printf("c = %cn",c);
return 0;
}
通常,在C语言能使用char *指针的地方可以使用字符串字面量。例如字符串字面量可以出现在赋值符号的右边比如上面的char *a,a = "abc"这个赋值操作是让指针a指向了字符串的第一个字符。
C语言允许对指针取下标,因此我们也可以对字符串字面量取下标。例如 char ch; ch = "abc"[0]。
注意:不要去修改字符串字面量!(字符串字面量位于程序的一个叫做“代码段”的地方,而且是只读的,这里不多说)
二、字符串变量
在某些编程语言中会专门为字符串变量提供一种数据类型,而C语言中我们通常会使用一维数组来存储字符串(但一定要记得保证字符串最后以空字符结尾!!!)
当我们自己编写字符串处理函数时也好考虑好空字符的处理!
#define STR_LEN 10
...
char str[STR_LEN + 1];//这里把STR_LEN定义成10强调str最多可以储存10个字符的字符串,然后在str数组的声明中对STR_LEN+1来储存空字符。
当然了,声明长度为STR_LEN + 1 的字符数组并不意味着他总是用于存放长度为STR_LEN 的字符串,字符串的长度取决于空字符的位置,而不是取决于存放字符串的字符数组的长度。STR_LEN +1只是限制了字符串的最大长度。
1.初始化字符串变量
可以在声明的时候进行初始化
char str1[] = "hello world"
由于我们一定要确保数组的长度大于字符串字面量的长度,所以我们可以省略它的长度,这种情况下编译器会自动为它补充一个空字符。
字符串字面量"hello world"复制到数组str1中,然后编译器自动补充空字符,这样就可以看做成一个字符串变量了。
当然还有其他的初始化办法,不过记上面这个就行了,上面这个是最常用的。
2.字符数组与字符指针
char *a = "hello world"
char a[] = "hello world"
这两个看起来是一样的声明,前者是声明了一个指针a,后者声明了一个数组a ,都可以看做是字符串。然而两者是有较大的区别的,我们不能认为上面两者可以互换。
在声明为指针时,我们是不能去修改字符串字面量的。(还记得前面提到的只读区代码段吧)
注意:指针变量一定要初始化后再去使用!
3.puts()、gets()、printf()、scanf()、fgets()函数的使用。
最后
以上就是醉熏画板为你收集整理的C语言——字符串学习笔记(1)种一棵树最好的时间是十年前,其次是现在 !的全部内容,希望文章能够帮你解决C语言——字符串学习笔记(1)种一棵树最好的时间是十年前,其次是现在 !所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复