C++ const用法详解(指针常量、常量指针、修饰函数、位置等)

305 阅读4分钟

一、const修饰基本数据类型

1.1 const修饰一般常量及数组

int const a = 100;
const int a1 = 100; //与上面等价
int const arr[3] = { 1,2,3 };
const int arr1[3] = { 1,2,3 };//与上面等价

1.2 const修饰指针

char *p = "hello";     // 非const指针, 非const数据
const char *p = "hello";  // 非const指针, const数据
char * const p = "hello";   // const指针, 非const数据
const char * const p = "hello";  // const指针, const数据

1.3 常量指针和指针常量

int num1 = 10;
int num2 = 20;
int num3 = 30;

int* p1 = &num1;        // 非const指针, 非const数据
const int* p2 = &num2;  // 非const指针, const数据  常量指针
int* const p3 = &num3;  // const指针, 非const数据  指针常量

cout << num1 << " " << &num1 << endl;
cout << num2 << " " << &num2 << endl;
cout << num3 << " " << &num3 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p2 << " " << p2 << endl;
cout << *p3 << " " << p3 << endl << endl;
//10 0000003C47AFFB84
//20 0000003C47AFFBA4
//30 0000003C47AFFBC4
//10 0000003C47AFFB84
//20 0000003C47AFFBA4
//30 0000003C47AFFBC4

p2 = p1;
// *p2 = 40;  常量指针时,*不可以通过修改所指向的变量的值*,但是指针*可以指向别的变量*。
// p3 = p1;   指针常量不能指向别的变量*,但是*可以通过指针修改它所指向的变量的值*。
*p3 = 40;
cout << num1 << " " << &num1 << endl;
cout << num2 << " " << &num2 << endl;
cout << num3 << " " << &num3 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p2 << " " << p2 << endl;
cout << *p3 << " " << p3 << endl << endl;
//10 0000003C47AFFB84
//20 0000003C47AFFBA4
//40 0000003C47AFFBC4
//10 0000003C47AFFB84
//10 0000003C47AFFB84  (p2变,num2没变)
//40 0000003C47AFFBC4

1.4 两个const

int num1 = 10;
int num2 = 20;

int* p1 = &num1;        // 非const指针, 非const数据
const int* p2 = &num2;  // 非const指针, const数据  常量指针
const int* const p4 = &num2;
cout << num1 << " " << &num1 << endl;
cout << num2 << " " << &num2 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p2 << " " << p2 << endl;
cout << *p4 << " " << p4 << endl << endl;
//10 000000B4FFAFF734
//20 000000B4FFAFF754
//10 000000B4FFAFF734
//20 000000B4FFAFF754
//20 000000B4FFAFF754

p2 = p1;
//*p2 = 40;
//p4 = p1;
//*p4 = 40;
cout << num1 << " " << &num1 << endl;
cout << num2 << " " << &num2 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p2 << " " << p2 << endl;
cout << *p4 << " " << p4 << endl << endl;
//10 000000B4FFAFF734
//20 000000B4FFAFF754
//10 000000B4FFAFF734
//10 000000B4FFAFF734
//20 000000B4FFAFF754

num1 = 100;
num2 = 200;
cout << num1 << " " << &num1 << endl;
cout << num2 << " " << &num2 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p2 << " " << p2 << endl;
cout << *p4 << " " << p4 << endl << endl;
//100 000000B4FFAFF734
//200 000000B4FFAFF754
//100 000000B4FFAFF734
//100 000000B4FFAFF734
//200 000000B4FFAFF754
int num1 = 10;
int num3 = 30;

int* p1 = &num1;        // 非const指针, 非const数据
int* const p3 = &num3;  // const指针, 非const数据  指针常量
const int* const p4 = &num3;
cout << num1 << " " << &num1 << endl;
cout << num3 << " " << &num3 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p3 << " " << p3 << endl;
cout << *p4 << " " << p4 << endl << endl;
//10 000000A8D86FFC24
//30 000000A8D86FFC44
//10 000000A8D86FFC24
//30 000000A8D86FFC44
//30 000000A8D86FFC44

// p3 = p1;
*p3 = 35;
cout << num1 << " " << &num1 << endl;
cout << num3 << " " << &num3 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p3 << " " << p3 << endl;
cout << *p4 << " " << p4 << endl << endl;
//10 000000A8D86FFC24
//35 000000A8D86FFC44
//10 000000A8D86FFC24
//35 000000A8D86FFC44
//35 000000A8D86FFC44

num1 = 100;
num3 = 300;
cout << num1 << " " << &num1 << endl;
cout << num3 << " " << &num3 << endl;
cout << *p1 << " " << p1 << endl;
cout << *p3 << " " << p3 << endl;
cout << *p4 << " " << p4 << endl << endl;
//100 000000A8D86FFC24
//300 000000A8D86FFC44
//100 000000A8D86FFC24
//300 000000A8D86FFC44
//300 000000A8D86FFC44

参考资料:

C++ const的用法详解

C++中的const,位置很关键