常量, 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 只讀 只讀
相關文章
相關標籤/搜索