char
char表示字符类型,一个char变量只能存储一个字符
char *
char * 是一个指向字符的指针,可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。一般使用的它的第二的功能来表示一个字符串,功能与字符串数组char ch[n] 一样。
char []:字符串数组
char* 和 char[] 相同点:
- char*和char[]这两种类型都可以对应一个字符串
char * a = "hello1";
char b[] = "hello2";
// 其中a是一个指向char变量的指针,b则是一个char数组(字符数组)
- 都是以'\0'结尾
- 很多时候二者可以混用,像函数传参数的时候,实参可以是char*,形参可以是 char[],反过来实参可以是char[],形参可以是 char *也是可以的
char 和 char[] 不同点:
- char*声明一个指针变量,其值(指向的内存区域)可以改变(这里的改变是可以指向另一个字符串,而不是修改字符串本身(似乎有问题));char[] 是常量(其实质是一个地址——C语言中规定数组代表数组所在内存位置的首地址,也是 str[0]的地址,即str = &str[0]),值不能改变。
char* a = "string1";
char b[] = "string2";
a = b; //OK
a = "string3"; //OK
b = a; //报错!左边操作数只读
b = "string3" //报错!左边操作数只读
char * p 的 p是指向一块内存区域,它指向的内存区域的大小可以随时改变,而当指针指向常量字符串时,常量字符串的内容是不可以被修改的,否则在运行时会报错。
char p[] 的 p 是数组对应着一块内存区域,其指向的地址(首元素地址)和容量在生命期里不会改变,只有数组的内容可以改变。
C语言中数组名可以复制给指针表示地址, 但是指针却不能赋给给数组名,它是一个常量类型,所以不能修改。
当定义 char a[10 ] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符。 而定义 char *s 时, 这是个指针变量,只占四个字节,32位,用来保存一个地址。
- char[] 对应的内存区域总是可写,char* 指向的符号常量不能写
string
string是C++标准库(STL)中的类型,它是定义的一个类,定义在<string>头文件中。里面包含了对字符串的各种常用操作,与char * 相比,其优势在于内容可以动态拓展、字符串操作的方便快捷,用 + 号进行字符串的连接等操作。
未完待续