注意,這裏用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 | 只讀 | 只讀 |