C++ const限定符与指针

2020-08-28  本文已影响0人  无聊的CairBin

指向常量的指针

指向常量的指针不能用于其所指对象的值。若想存放常量对象的地址,只能使用指向常量的指针。

const int a =  3;   //a是个常量,其值不能改变
int *b = &a;        //错误:b是个普通指针
const int *c = &a;  //正确
*c = 8; //错误:c不能给a赋值

允许一个指向常量的指针指向一个非常量,但不能通过该指针修改这个非常量的值(但该非常量可以通过其他途径修改)。

int d = 0;  //一个整型变量
c = &d;     //正确,但不能通过指针c修改d的值

const指针

常量指针必须初始化,而且一旦初始化完成其值(也就是放在指针的那个地址)就不能改变了。把*放在const前说明不变的是指针的值而不是所指的那个值。

int a = 0;
int b = 1;
const int *c = &a;
int *const d = &a;


c = &b; //正确:但不能通过c改变b的值
*d = 5; //正确:可以通过d改变a的值
d = &b; //错误:d是一个常量指针,其本身的值不能改变

顶层const与底层const

基本概念

指针本身是不是常量指针所指对象是不是常量是两个相互独立的问题。
用名词 顶层 const 表示本身是个常量。
用名词 底层 const 表示所指对象是个常量。

int a = 0;
int *const p1 = &i; //顶层const
const int b = 42;   //顶层const
const int *p2 = &b; //底层const

拷贝操作

上一篇 下一篇

猜你喜欢

热点阅读