《C++ 大学教程》8.5 使用const修饰指针

  • 指针传递给函数有四种方式:

    • 指向非常量数据的非常量指针:int* countPtr;//声明一个指向非常量数据的非常量指针,不需要包含const

    • 指向常量数据的非常量指针:const int * countPTR ;

    • 指向非常量数据的常量指针:int * const countPTR = &x;//始终指向同一个内存位置,通过该指针可修改这个位置上的数据。且声明为const的指针在声明时必须被初始化。

    • 指向常量数据的常量指针:const int * const countPTR = &x;//不能再作任何修改

在这里插入图片描述
这是牛客网的一道练习题,我拿来做个例子。

//解释内容来自《C++大学教程》Deitel 第七版 张引译 8.5节使用const修饰指针 (P276)

指向非常量数据的常量指针始终指向通过一个内存位置,通过该指针可以修改这个位置上的数据,这就是数组名的默认情况,数组名是指针常量(数组名不可改变,数组元素可以改变)。即,常量指针不可变,非常量数据可以通过指针改变

char *const p;//指向非常量字符的常量指针
//指针常量(指针是一个常量)

指向常量数据的非常量指针可以被修改以指向任何适当类型的其他数据项,但是不能通过该指针来修改它所指向的数据。即,指针可变,常量数据不可变

char const *p; //指向常量数据的非常量指针;
const char *p;//指向常量数据的非常量指针;
//常量指针(数据是一个常量)

所以这道题的C,p是一个指向常量的指针,是常量指针,指针可以改变,指针指向的值不可以修改。
但是,当指针是常量指针时,必须要对其初始化。所以,这道题的A选项,在编译器中编译时,会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值