1.字符数组
这个字符数组最后加入了0,变成了可以计算的字符数组,属于字符串了。
- 写0 和 写 ‘\0’ 是一样的。因为单引号里面使用了转义字符,他俩都表示的大小都是十进制的0。只不过占用的内存空间不同,一个是4字节,一个是1字节。
- 但是和‘0’不同,‘0’表示的是一个字符0,他表示的十进制的值是48。
- 0 是字符串结束的标志,但他不被计到字符串的长度中去;但是在数组中,0作为一个元素,被计入到数组的大小中去。
2.字符串变量
这些变量其实都是字符数组的变量,属于不同的表达形式。
- 定义了一个指针,指向了一个字符串,里面是“Hello”
- 定义了一个字符数组;
- 定义了一个10字节大的字符数组,里面放入了“Hello”,它有5个字符,要占据6个字节的空间,因为编译器会在结尾自动补充"\0";
3.字符串常量
- 字符数组的长度一定是看到的字符的 长度+1,别忘了最后的“\0”。一定要有0才是c语言的字符串
- 相邻的两个字符串会被连接起来,成为一个大的字符串
字符串字面量就是双引号 “”
4.字符串的常/变量
char *s = "hello";
s[0] = b;
1.这种操作是不允许的,尽管可以进行编译
- s和s2的地址是相同的,表示他们指向同一个 hello;
- 定义了一个本地变量 i;可以看到本地变量的地址很大,和 s 距离很远
- 其实,s(s2)指向的字符串储存于代码段,而且是只读的,所以不可以执行s[0]=…
- "hello"实际上是一个字符串常量
区别就在于:
char *s = "hello";
指针s要指向某个地方的字符串hello,(只读)
char s[] = "hello";
数组s,字符串hello就储存在这,并且可进行字符串的计算
根据输出的地址,定义的变量 i 和之后的数组s3[]是储存到一块的,都是本地变量
如果作为指针,不知道字符串在哪,可以用来:
- 只表达一个字符串,不去改写
- 如果数组作为了函数的参数,那么他就是一个指针了,不妨使用指针的形式表达函数的参数
最后注意,字符串末尾一定有0;数组和指针、数组和字符串的关系。