常量, char[], const char[], char*, const char*, char* const以及const char* const的详解

注意,这里用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 只读 只读
相关文章
相关标签/搜索