c++:const修饰指针

 

在开始之前:

一般指针的定义:

int* number = 6;         // *number是数字6。

int ducks = 12;
int* birddog = &ducks;  // 把birddog(而不是*birddog)的值设置为&ducks。

*运算符被称为间接符号,或者解引用。
用于指针时,可以得到该地址存储的值。

 

而 int*是一种复合类型,是指向int的指针。

 

第一种const的情况:

int age = 39;
const int* pt = &age;

这里的const只能防止修改pt指向的值(这里是39), 而不能防止修改pt的值。

也就是说,可以将一个新的地址赋给pt:

int sage = 80;
pt = &sage;

但仍不能使用pt来修改它指向的值(现在为80)。

 

int grop = 16;
int chips = 12;
const int* p_snack = &grop;

*p_snack = 20;        // no, 禁止修改 p_snack指向的值
p_snack = &chips;     // ok, p_snack可以指向另一个变量

 

第二种const的情况:

int sloth = 3;
const int* ps = &sloth;        // a pointer to const int
int* const finger = &sloth;    // a const pointer to int

在最后一个声明中,关键字const的位置与以前不同。
这种声明格式使得finger只能指向sloth,但允许使用finger来修改sloth的值。
中间的声明不允许使用ps来修改sloth的值,但允许将ps指向另一个位置。
简而言之,finger和*ps都是const, 但*finger和ps不是

int grop = 16;
int chips = 12;
int* const p_snack = &grop;

*p_snack = 20;        // ok, p_snack可以用来修改值
p_snack = &chips;     // no, 禁止改变p_snack指向的变量

 

最后

把 int 去掉之后, 就知道const修饰是什么:

int sloth = 3;
const int* ps = &sloth; 变成 -> const *ps = &sloth; // const 修饰的是 *ps int* const finger = &sloth; 变成 -> * const finger = &sloth; // const 修饰的是 finger

 

原文链接: https://www.cnblogs.com/weishuan/p/12269195.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++:const修饰指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327453

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:16
下一篇 2023年3月1日 下午4:16

相关推荐