C++指针常量和常量指针的区别(附带实例)
C++ 中,const 是常量限定符,通过 const 关键字可以把一个对象转换成一个常量。
例如:
const 除了可修饰 int、float、char 等常量外,还可以修饰指针,使指针指向一个常量,或使指针本身就是一个常量。
例如:
例如:
例如:
指向常量的指针与指针常量的区别在于:
【实例】指针与 const。
例如:
const int a = 1; //通过 const 关键字,定义 a 为整型常量,值为 1,后续不允许再赋值其中,const 关键字放在数据类型前后都可以,即 const int 和 int const 等效,都表示整型常量。
const 除了可修饰 int、float、char 等常量外,还可以修饰指针,使指针指向一个常量,或使指针本身就是一个常量。
C++指向常量的指针
如果指针指向的对象是一个常量,则后续不能通过引用指针(即 *p 形式)改变所指对象的内容。要存放常量对象的地址,也只能通过指向常量的指针。例如:
const int i = 9; //定义 i 为整型常量 const int *p = &i; //定义 p 为指向整型常量 i 的指针 *p = 3; //错误,不能通过*p 修改所指对象的内容
C++指针常量
指针常量,表示该指针为一个常量,即指针指向一个对象后,不可以再指向其他对象(本质是指针指向的地址不允许再发生改变)。例如:
int a1 = 10; //定义整型变量 a1 const int a2 = 20; //定义整型常量 a2 int *const p1 = &a1; //定义指针常量 p1,指向整型变量 a1,无法再指向其他对象,但对象内容可以改变 const int *const p2 = &a2; //定义指针常量 p2,指向整型常量 a2,无法再指向其他对象,且对象内容无法改变 其中,p1 和 p2 都是指针常量,后续均无法改变指向的地址空间。
C++指向常量的指针与指针常量的区别
如何区分指向常量的指针和指针常量呢?可以根据“*”和 const 关键字的位置来判断。例如:
const int *p = &i; //根据“*p”判断,这是一个指向整型常量的指针 int const *p = &i; //根据“*p”判断,这是一个指向整型常量的指针上述定义中,“=”左边的“*p”说明 p 是一个指针,指向一个整型常量(const int 或 in const)。
const int *const p = &i; //根据“*const p”判断,这是一个指针常量,指向一个整型常量 int *const p = &i; //根据“const p”判断,这是一个指针常量,指向一个普通整型上述定义中,“=”左边的“const p”说明 p 是一个指针常量,指向一个 const int 或 int 对象。
指向常量的指针与指针常量的区别在于:
- 指向常量的指针:指针本身可能不是一个常量对象,但指向的对象是一个常量,这说明可以让指针指向常量i,或者指向常量a,但无法通过该指针修改它所指向的常量。
- 指针常量:说明该指针就是一个常量,不能改变该指针指向的对象。
【实例】指针与 const。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int i = 5;
const int c = 99; //定义整型常量
const int *pR = &i; //定义指向常量的指针 pR,用来读取内存数据,可以改变地址
int *const pC = &i; //定义指针常量 pC,不能改变指向地址,但能改变地址中的内容
const int *const pCR = &i; //定义指针常量 pCR,指向整型常量,只能读内存数据,不能改变指向地址
cout << "三个指针都指向了同一个变量i,同一块内存" << endl;
cout << "指向常量的指针 pR 操作:" << endl;
//*pR = 6 //去掉语句前方法注释报错
cout << "通过赋值语句修改 i:" << endl;
i = 100;
cout << "i:" << i << endl;
cout << "将 pR 的地址变成常量 c 的地址:" << endl;
pR = &c;
cout << "*pR:" << *pR << endl;
cout << "指向常量的指针 pC 操作:" << endl;
//*pC = &c; //去掉语句前方法注释,将报错
cout << "通过 pC 改变 i 值:" << endl;
*pC = 6;
cout << "i:" << i << endl;
cout << "指向常量的指针常量 pCR 操作:" << endl;
//pCR = &c; //报错
//*pCR = 100; //报错
cout << "通过 pCR 无法改变任何东西,真正做到了只读" << endl;
return 0;
}
运行结果为:
三个指针都指向了同一个变量i,同一块内存
指向常量的指针 pR 操作:
通过赋值语句修改 i:
i:100
将 pR 的地址变成常量 c 的地址:
*pR:99
指向常量的指针 pC 操作:
通过 pC 改变 i 值:
i:6
指向常量的指针常量 pCR 操作:
通过 pCR 无法改变任何东西,真正做到了只读
ICP备案:
公安联网备案: