注意,這里用char類型只是舉了一個例子,其他的int之類的也通用。
1: 常量:
例子:
char str[] = "Hello world!"; char ch = 'a'; int i = 12345;
我們看等號右邊的,這些就叫常量。常量在程序運行過程中不會發生改變,並且隨着程序一起裝入內存。
2: char[]:
例子:
char str[] = "Hello world";
str是一個字符型數組(字符串)變量。可讀可寫。
3: const char[]:
例子:
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 | 只讀 | 只讀 |