#include <iostream>
using namespace std;
class Const {
const int i;
int j;
public:
Const(int ci);
void test();
const int* constTest();
int* constTest2() const;
};
Const::Const(int ci):i(ci) {
j = 18;
};
void Const::test() {
int i0 = i;
cout << "i0 = " << i0 << endl;//地址值
const int* i1;//整型指针,值是常量
i1 = &i0;
//int* const i2;//必须要直接初始化
int* const i2 = &i0;//整型指针,指针是常量
cout << "i1 = " << i1 << endl;//地址值
cout << "i2 = " << i2 << endl;//地址值
//i2++;//不能改变指针
*i2 = 1;//可以改变值
cout << "i1 = " << i1 << endl;//地址值
cout << "i2 = " << i2 << endl;//地址值
cout << "*i1 = " << *i1 << endl;//1
cout << "*i2 = " << *i2 << endl;//1
i1++;//可以改变指针
//*i1 = 2;//不能改变值
cout << "i1 = " << i1 << endl;//地址值(已改变)
cout << "i2 = " << i2 << endl;//地址值
*i2 = 5;
cout << "*i1 = " << *i1 << endl;//未知值
cout << "*i2 = " << *i2 << endl;//5
cout << "++*i2 = " << ++*i2 << endl;//6
cout << "*i2 = " << *i2 << endl;//6
}
/* const写在方法名前面,表示返回值是const */
const int* Const::constTest() {
j++;
return &j;
}
/* const写在方法名后面,表示是const函数 */
int* Const::constTest2() const {
//j++;//const函数内不允许修改数据成员
//int* j1 = j;//const函数内不允许赋值给int*
int j1 = j;
j1++;
return &j1;
}
int main() {
Const c(3);
c.test();
const int* const p = c.constTest();
cout << "*p = " << *p << endl;//19
const int* p2 = c.constTest2();
cout << "*p2 = " << *p2 << endl;//20
getchar();
};
我机器上的运行结果如下:
i0 = 3
i1 = 001DF950
i2 = 001DF950
i1 = 001DF950
i2 = 001DF950
*i1 = 1
*i2 = 1
i1 = 001DF954
i2 = 001DF950
*i1 = -858993460
*i2 = 5
++*i2 = 6
*i2 = 5
*p = 19
*p2 = 20