什么是字符串

字符串是指一组字符的集合,与字符数组不同的是,字符数组强调的是存储结构而字符串强调的是存储内容。

C语言没有专门定义字符串数据类型(如其他语言中的string),它用以‘\0‘结尾的字符数组来表示一个逻辑意义上的字符串

字符串的初始化

  • C语言中的字符串是以’\0’结束的字符数组
  • C语言中的字符串常量区
  1. char str[11] = "I am happy"; // 用数组的形式修改定义的字符串值
  2. char str[] = "I am happy"; // 自动分配内存空间
  3. char *p = "I am happy"; // 指针方式

字符串是由一对双引号括起的字符序列。

例如: “CHINA” , “C program” , “$12.5”等都是合法的字符串。

字符串和字符不同,它们之间主要有以下区别:

  • 字符由单引号括起来,字符串由双引号括起来。
  • 字符只能是单个字符,字符串则可以含一个或多个字符。
  • 可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串。但是可以用一个字符数组来存放一个字符串,这将在数组一章内予以介绍。
  • 字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符”\0” (ASCII码为0)。这是字符串结束的标志。

例如,字符串 “C program” 在内存中所占的字节为:

C p r o g r a m \0
  1. char c = 'a'
  2. char s[] = "a"

字符’a’ 和 字符串”a”,虽然都只有一个字符,但在内存中的情况是不同的。

‘a’在内存中占一个字节,可表示为:

a

“a”在内存中占二个字节,可表示为:

a \0
  1. int main() {
  2. compare();
  3. char num[] = "1234567";
  4. printf("%p\n", num);
  5. /* char num[] = "1234567" 内存存储
  6. 内存地址 ASCII值 字符
  7. 0x004DF810 +49 1
  8. 0x004DF811 +50 2
  9. 0x004DF812 +51 3
  10. 0x004DF813 +52 4
  11. 0x004DF814 +53 5
  12. 0x004DF815 +54 6
  13. 0x004DF816 +55 7
  14. 0x004DF817 +0 .
  15. */
  16. system("pause");
  17. return 0;
  18. }
1 2 3 4 5 6 7 \0
004DF810 004DF811 004DF812 004DF813 004DF814 004DF815 004DF816 004DF817
49 50 51 52 53 54 55 0

“012345678” 对应的ASCII值是48-57

  1. #include <stdio.h>
  2. int main () {
  3. char *p = "hello world";
  4. printf("%s\n", p);
  5. // p = 004053B0 hello world"=004053B0
  6. printf("p = %p, \"hello world\"=%p\n", p, "hello world");
  7. // char name[100] = "china"; //用数组的形式修改定义的字符串值
  8. char name[] = "china"; // 这样会自动分配内存空间
  9. name[0] = 'C';
  10. printf("%c\n", name[0]); //C
  11. printf("%c\n", "china"[0]); //c 常量区不会改变
  12. printf("%s\n", name); //China
  13. return 0;
  14. }