當const遇上指標

2021-10-18 03:18:41 字數 1447 閱讀 7212

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 ...