const關鍵字
可以有很多用處,比如:
#define row 10就代表row的值恒為10,不可修改。
而
const int row=10;也可以將值恆定,無法修改。還有
const
int num[10]
;//將陣列整個保護,無法修改。
但,並不是將被保護量變為常量,而是在處理時將其看為常量,不能對其修改。
當const與指標結合
我們先來看看這個
這就會報錯,但用指標去修改就不會有任何問題。指標並不是const指標。
但是,比如
int num=
;const
int* p=num;
定義了乙個指向num陣列的指標,又const指標p指向了num陣列的首元素,也就是p中儲存了num[0]的位址。
而這個,可以陣列元素直接修改,但不能通過指標。不過可以又++p,讓指標指向別處。也就是說,指標可以自增。但是自增後比不意味著,p沒了const修飾,指標依舊不能去修改指標指向的值。
並且,也不能通過指標移動陣列表示法去修改,與上面描述的是乙個意思。
不允許使用指標去修改指標指向的資料的值。
還有一種
int* const p;這種型別,與上面的有差異。
這種型別,是不能改變指標指向的。但是卻可以利用指標去修改陣列元素。
這種是不能指向別處的指標,只能指向初始化設定的位址。
再加一句
被const修飾的陣列是不能賦給非const的指標。為了防止陣列元素被修改。
當const遇上了指標
將指標指向常量物件,這樣可以防止使用指標來修改所指向的值 int num 6 const int p p 8 非法,不能改變指向常量物件的值 但是,物件num本身不是常量可以被修改 num 8 合法的 也就是說,它指向的那個值並不是常量,因此我們不能通過p來修改它指向的值但是可以修改num的值從而修...
引用遇上const和指標
int a 1 int b 2 const int c a const int d c const int const e c d b 正確 e b 錯誤 d 3 錯誤 int f a int g f int const h f g b 正確 h b 錯誤 g 3 正確當const引用是引用的乙個指...
當函式過載遇上函式指標
include include using namespace std void func void func int a void func int a,int b void func string a,string b typedef void fp1 int,int typedef void ...