字符数组是字符串吗?
我们在电脑上输入
char word[] = {'H','e','l','l','o','!'};
它其实只是字符数组,而不是字符串。其实最开始我也是非常茫然,字符串和字符数组有什么么区别吗?为什么要进行区分呢?
C语言中字符串是指以0结尾的一串字符,0或者‘/0’是一样的(‘/0’只是一个字节,0是一个int),但是和‘0‘不同,0标志着字符串的结束,接下来不是字符串啦,但它本身不是字符串的一部分。作用就是为了让代码能顺利运行,字符串以数组的形式存在,以数组或指针的形式访问,更多是以指针的形式。
string.h 里面有很多处理字符串的函数,我们不能再只使用原来的头文件了
char *str = "hello";
这段代码的意思是有一个名为str的指针它指向了一个字符数组,这个数组里面存放了“hello ”,但是这个“hello”在哪儿?
char line[10] = "hell0";
数组line里面有10个字节,存放了"hello"之后,被占据了六个字节,因为末尾的0编译器会自动给你补上。“hello”会被编译器编程一个字符数组放在某处,两个相邻的字符串常量会被自动连接起来,就如同下图中printf中的内容,实际上是两个字符串,但是C语言将自动给你变成一个大大的字符串
#include <stdio.h>
int main()
{
printf("输入身高的英尺和英寸,"
"如输入\"5 7\"表示5英寸7英尺:");
double foot;
double inch;
scanf("%lf %lf",&foot,&inch);
printf("身高是%f米。\n",
((foot+inch/12)*0.3));
return 0;
}
但是C语言不能用运算符对字符串做运算,后来的语言例如Java和python可以对字符串进行更多的操作,C语言出现在1970年代的早期,那个时候计算机更多地进行数字运算,在80年代之后,计算机才更多地投入进行信息处理,两者最大的不同在于处理什么东西,所以新的语言会更关注处理字符串的能力。
而C语言唯一表现出来懂字符串的地方就是字符串字面量可以用来初始化字符数组,以及标准库提供了一系列函数来处理字符串