常量指针和指针常量的区别

常量指针

常量指针本质上是个指针,只不过这个指针指向的对象是常量。

特点:const 的位置在指针声明运算符 * 的左侧。只要 const 位于 * 的左侧,无论它在类型名的左边或右边,都表示指向常量的指针。(可以这样理解,* 左侧表示指针指向的对象,该对象为常量,那么该指针为常量指针。)

int const * ptr;
const int * ptr;

注意 1:指针指向的对象不能通过这个指针来修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。

举个栗子:

#include <iostream>
using namespace std;

int main()
{
    const int c_var = 20;
    const int *ptr = &c_var; 
    *ptr = 100;   // error: assignment of read-only location '* ptr'         
    return 0;
}

注意 2:虽然常量指针指向的地址中的值不能改变,可是因为常量指针本身是一个指针,因此,指针指向可以改变。

举个栗子:

#include <iostream>
using namespace std;

int main()
{
    const int c_var1 = 10;
    const int c_var2 = 20;
    const int* ptr = &c_var1;
    ptr = &c_var2;
    return 0;
}

就记住,cosnt修饰的是*p的时候,那么就代表*p的值是不可以改变的,*p代表的就是一个值!

指针常量

指针常量的本质上是个常量,只不过这个常量的值是一个指针。
特点:const 位于指针声明操作符右侧,表明该对象本身是一个常量,* 左侧表示该指针指向的类型,即以 * 为分界线,其左侧表示指针指向的类型,右侧表示指针本身的性质。

int * const ptr;

注意 1:指针常量的值是指针,这个值因为是常量,所以指针本身不能改变。

#include <iostream>
using namespace std;

int main()
{
    int var1, var2;
    int * const ptr = &var1;
    ptr = &var2; // error: assignment of read-only variable 'ptr'
    return 0;
}

注意 2:指针的内容可以改变。         

#include <iostream>
using namespace std;

int main()
{
    int var = 10;
    int * const ptr = &var;
    *ptr = 20; 
    return 0;
}

备注:指针常量,常量指针,哪个名词在前哪个不变。(指针常量---指针的指向不能变,常量指针---指针指向的地址中的值不能变)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值