const修饰可以把对象转换成为常数对象,什么意思呢?
其中最重要的一句是 const int *pi; 这句话应该从右向左读: pi是一个指向int类型的,被定义成const的对象的指针。
这里注意这句: const int *const pi;
就是说利用const进行修饰的变量的值在程序的任意位置将不能在被修改,就跟常数一样。
使用方法: const int a = 1;
但是对于指针来说,const依然是起作用的,以下两点非常重要!
Ex.1
#include <iostream>
using namespace std;
static void compositor(int *p1,int *p2);
int main() {
const int a = 10;
int b = 20;
const int *pi;
pi = &a;
cout<<*pi<<"|"<<a<<endl;
pi = &b;
cout<<*pi<<"|"<<b<<endl;
cin.get();
return 0;
}
其中最重要的一句是 const int *pi; 这句话应该从右向左读: pi是一个指向int类型的,被定义成const的对象的指针。
这样的声明方式的作用是 可以修改 pi这个指针指向的内存地址,但是 不能修改 指向的对象的值。
Ex.2
#include <iostream>
using namespace std;
int main() {
int a = 10;
const int *const pi = &a;
cout << *pi <<"|"<<a<<endl;
cin.get();
}
这里注意这句: const int *const pi;
意思是:pi是指向int类型对象的const指针;
这种方式既不能修改pi指向对象的内存地址,也不能利用指针的解引用方式修改对象的值,也就是用*pi = 10这种方式。
结合以上两点,下面这种方式就可以避免在程序的任意地方修改对象a的值或者是指针pi的地址了 ,常用于函数的形式参数。
#include <iostream>
using namespace std;
int main() {
const int a = 10;
const int *const pi = &a;
cout << *pi <<"|"<<a<<endl;
cin.get();
}