const修饰指针
最后更新于:2022-04-02 02:06:46
[TOC]
## const修饰指针 - 变量的地址可以改变,但内容不能改变
`const int * p1`,p1是指向int型的指针变量,然后再作为常量。
类型也必须一致。
using namespace std;
int main()
{
int x = 12;
int y = 25;
char c = 'D';
const int *p1;
//新分配一块int型空间,再将p1指向新空间作为常量,OK!
p1 = new int(100);
cout << "p1: " << *p1 << endl; // 100
delete p1;
cout << "p1: " << *p1 << endl; // 0
//将p1指向非int型变量作为常量,NG!
//p1 = &c; //类型不匹配
//将p1指向int型变量作为常量,OK!
p1 = &x;
cout << "p1: " << *p1 << endl; // 12
//修改p1的地址,OK!
p1 = &y;
cout << "p1: " << *p1 << endl; // 25
//修改p1指针的值,NG!
//*p1 = 156; //指针值不能被修改
//通过其它变量,间接地修改p1指针的值,OK!
y = 158;
cout << "p1: " << *p1 << endl; // 158
return 0;
}
```
## const修饰指针后再限定类型 - 与上一种一致 `int const * p2`,p2是指针变量,然后再作为常量并限制为int类型。变量的地址可以改变,但内容不能改变,类型也必须一致 目前看与 `const int * p2` 一样 ## const修饰指针地址 - 变量的地址不可以改变,但内容可以改变 `int * const p3`,p3是指针变量,其地址作为常量并指针限制为int类型。 定义时必须同时赋初始值
using namespace std;
int main()
{
int x = 12;
int y = 25;
//int * const p3; //编译出错,初始化必须赋值
int *const p3 = &x;
//新分配一块int型空间,再将p3指向新空间作为常量,NG!
//p3 = new int(100);
//修改p3的地址,NG!
//p3 = &y; //地址不能被修改
//修改p3指针的值,OK!
*p3 = 156; //指针值可以被修改
cout << "p3 值: " << *p3 << endl;
cout << "x 值 : " << x << endl; // 156
return 0;
}
```
## const修饰指针并修饰地址 - 不允许修改地址,也不允许修改内容
using namespace std;
int main()
{
int x = 12;
int y = 25;
//const int * const p4; //编译出错,初始化必须赋值
const int *const p4 = &x;
cout << "p4: " << *p4 << endl;
//修改p4的地址,NG!
//p4 = &y; //地址不能被修改
//修改p4指针的值,NG!
//*p4 = 156; //指针值不能被修改
//通过其它变量,间接地修改p4指针的值,OK!
x = 123;
cout << "p4: " << *p4 << endl;
return 0;
}
```
';
main.cpp
``` #include## const修饰指针后再限定类型 - 与上一种一致 `int const * p2`,p2是指针变量,然后再作为常量并限制为int类型。变量的地址可以改变,但内容不能改变,类型也必须一致 目前看与 `const int * p2` 一样 ## const修饰指针地址 - 变量的地址不可以改变,但内容可以改变 `int * const p3`,p3是指针变量,其地址作为常量并指针限制为int类型。 定义时必须同时赋初始值
main.cpp
``` #include## const修饰指针并修饰地址 - 不允许修改地址,也不允许修改内容