我們經(jīng)痴奘郏可以在函數(shù)接口參數(shù)位置看到有const關(guān)鍵字恕汇,但是這個關(guān)鍵字到底有什么作用呢?其實(shí)const關(guān)鍵字的作用主要是看它在 * 號的左邊還是右邊。
如果 const 是在 * 號的左邊徙赢,主要表示的是指向的內(nèi)存空間內(nèi)容不能夠隨意修改赂弓;如果 const 是在 * 號的右邊,主要表示的是指向的孽鸡,代表了常量指針蹂午,其內(nèi)容可以修改,但是指針指向的目標(biāo)內(nèi)存是不能夠修改的彬碱;如果*號左右都有指針的話豆胸,便說明,指針指向和內(nèi)容都不能夠修改巷疼。
舉例說明:
int getStr(const char* p1){
//此處const的作用是p1所指向的內(nèi)存空間不能夠隨意修改
//p1[0] = 'a';
p1 = 0x1;
p1 = 0x2;
return 0;
}
int getStr2( char* const p1){
//此處const的作用是指針p1是一個常量晚胡,指向的地址可以隨意修改,但是指針不能改動
p1[0] = 'a';
// p1 = 0x1;
// p1 = 0x2;
//p1++;
return 0;
}
int getStr3(const char* const p1){
//指針和指針地址都不能夠隨意修改
// p1[0] = 'a';
// p1 = 0x1;
// p1 = 0x2;
//p1++;
return 0;
}
int main(int argc, const char * argv[]) {
system("pause");
return 0;
}
思考:為什么int a[10]是一個常量皮迟?
int a[10];
// a++; 報錯
int *p = a;
p++;
system("pause");
return 0;
}
因?yàn)镃++編譯器要拿著a去析構(gòu)內(nèi)存搬泥,不能讓你隨意改變指針的指向。