注意,这里用char类型只是举了一个例子,其余的int之类的也通用。数组
1: 常量:spa
例子:指针
char str[] = "Hello world!"; char ch = 'a'; int i = 12345;
咱们看等号右边的,这些就叫常量。常量在程序运行过程当中不会发生改变,而且随着程序一块儿装入内存。code
2: char[]:blog
例子:内存
char str[] = "Hello world";
str是一个字符型数组(字符串)变量。可读可写。字符串
3: const char[]:table
例子:class
const char str[] = "Hello world!";
str是一个只读字符串。它的内存单元中的值不能够被改变,只能在变量分配内存的时候被初始化进去。若是这样写就是非法的:变量
const char str[] = "Hello world!"; str = "ypa!";//Error Example
4: char*:
例子:
char str[] = "Hello world"; char *lpstr = str;
lpstr是一个指向字符数组(字符串)变量的指针变量。lpstr的值可读可写,也就是在不一样时间它能够指向不一样的的内存单元;同时,它所指向的内存单元str也可读可写。
5: const char*:
例子:
const char str[] = "Hello world!"; const char *lpstr = str; //这样写也同样: //char const str[] = "Hello world!"; //char const *lpstr = str;
lpstr是一个指向只读字符串的指针变量。lpstr的值可读可写,也就是在不一样时间它能够指向不一样的的内存单元;可是,它所指向的内存单元str只读不可写。若是这样写就是非法的:
const char str[] = "Hello world!"; const char *lpstr = str; *lpstr = 'y';//Error Example
6: char* const:
例子:
char str[] = "Hello world!"; char* const lpstr = str;
lpstr是一个指向字符数组(字符串)变量的只读指针量。lpstr的值只读不可写,也就是它被初始化了时候就不能再指向其余变量了;可是,它所指向的内存单元str是可读可写的。若是这样写就是非法的:
char str1[] = "Hello world!"; char str2[] = "ypa!"; char* const lpstr = str1; lpstr = str2;//Error Example
7: const char* const:
例子:
const char str[] = "Hello world!"; const char* const lpstr = str;
lpstr是一个指向只读字符串的只读指针量。lpstr的值只读不可写,也就是它被初始化了时候就不能再指向其余变量了;而且它所指向的内存单元str也是只读不可写的。若是这样写就是非法的:
const char str1[] = "Hello world!"; const char str2[] = "ypa!"; const char* const lpstr = str1; *lpstr = 'y';//Error Expmple lpstr = str2;//Error Example
总结:
类型 | 本身内存单元的属性 | 所指向的内存单元的属性 |
char[] | 读/写 | 无 |
const char[] | 只读 | 无 |
char* | 读/写 | 读/写 |
const char* | 读/写 | 只读 |
char* const | 只读 | 读/写 |
const char* const | 只读 | 只读 |