干什么用的?
保持某个变量为常量。
通常是这样声明的:
const int a = 10; //在声明的同时必须初始化,否则以后就不能修改(初始化)了。
const需要仔细看看的就是指针常量的声明和使用。
可以有哪几种结构呢?
1,const TYPE *foo
这样声明了一个TYPE类型的指针常量,可以指向任何TYPE类型的变量(可以修改),但不可以通过*foo来修改指向变量的内容。
例如:
错误例子:
#include <iostream>
using namespace std;
int main(void){
int a = 10;
int b = 20;
const int * foo = &a;
*foo = 100; //这里会有l-value specifies const object的error,说明*foo不能修改变量内容
cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;
return 0;
}
正确的例子:
#include <iostream>
using namespace std;
int main(void){
int a = 10;
int b = 20;
const int * foo = &a;
foo = &b; //可以指向其他变量,但同样不能修改*foo指向的变量b的值。
cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;
return 0;
}
2,TYPE * const foo
这样声明了一个TYPE类型的常量指针,foo在声明的时候要指定所指向的变量,指定以后就不可以修改,但可以修改指定变量的值。
把上面的正确例子修改一下:
#include <iostream>
using namespace std;
int main(void){
int a = 10;
int b = 20;
int * const foo = &a;
foo = &b; //啊噢,不能修改了。
cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;
return 0;
}
再改正一下:
#include <iostream>
using namespace std;
int main(void){
int a = 10;
int b = 20;
int * const foo = &a;
*foo = 200; //这下子好了。哈~
cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;
return 0;
}
3,const TYPE * const foo
这个就不细说了。什么都不能动。都是“死”的。
小结一下,const 如果在TYPE *前,表示所指向内容不能修改,但是指向什么变量是可以修改的;
const 如果在TYPE *后,表示指向什么变量是不能修改的,但是指向变量的内容是不能修改的。