C 語言中
在C語言中,const是個假語法恋拷,const 中的變量可以通過指針修改季俩,例如:
int const 和 const int 等價
const int a = 10;
int *p = (int*)&a;
*p = 20;
printf("%d\n",a);//輸出20
C++中
const 修飾的常量必須被初始化
int const 和 const int 等價
const int a = 10;//C++的const確實對a起了保護作用,不能通過指針的間接修改
int *p = (int*)&a;
*p = 20;
printf("%d\n",a);//輸出10
void test(){
const int a;
const int b;
int array[a+b]={0}梅掠;//C++中的const就是一個常量,永遠不會被改變
}
const* 和*const的區(qū)別
經(jīng)车旯椋混淆c++中的const修飾指針的作用阎抒,今天看到一個blog說的很好“以*為界,左物右指”
當使用帶有指針的const時消痛,有兩種選擇:
- const修飾指針正指向的對象
- const修飾存儲在指針本身的地址且叁。
1 指向const的指針
使用指針定義的技巧,正如任何復雜的定義一樣秩伞,是在標識符的開始處讀它并從里到外讀逞带。如果我們要使正指向的元素不發(fā)生改變,得寫:
const int * x;
從標識符開始:“x 是一個指針纱新,指向一個const int展氓。”
把const從一邊移到另一邊脸爱,結果一樣遇汞。
int const * x;
2 const指針
是指針本身成為一個const指針,必須把const標明的部分放在*的右邊簿废,如:
int d = 1;
int * const x = &d;
指針本身是const指針空入,編譯器要求給它一個初始化值,這個值在指針壽命期間不變族檬。然而要改變它所指向的值是可以的歪赢,可以寫*x = 2。
這些可以總結成這樣一句話:
以*為分界點,
當const在*的左邊時,實際物體值不變
當const在*的右邊時,指針不變,
即,(鎖)左物右指
這樣來記比較方便5チ稀埋凯!
int main(int argc,char **argv)
{
int b = 10;
int * const a = &b;//右指針
*a = 30;
printf("%d---%d\n", *a,b);//30---30
int c = 20;
int const *d;//左物
d = &b;
d = &c;
printf("%d\n", *d);//20
system("pause");
return 0;
}
define和const的區(qū)別
- define和const變量在編譯的階段不一樣,define是預處理器扫尖,const是編譯器
- define沒有{}區(qū)域限制,const是編譯器處理递鹉,完全符合編譯器的邏輯判斷和語法分析