const与指针

1.const

        类型修饰符。用来修饰一个变量,使变量值无法被修改,得到了一个常量。

        const在对变量进行修饰时, 变量类型的位置对const对变量的修饰效果是无影响的。只要const在变量名前,就将这个变量修饰为常量。如:

const int a = 0;
int const a = 0;

         二者等价,都是将a修饰为常量。

2.const与一级指针的使用

        const在修饰指针时,有了‘*’的参与 ,const与*的位置会使const产生截然不同的修饰效果。

const int a = 10, b = 20;
const int* p = &a;//等价于int const *p = &a;

        1)const int* p;‘*’在const之后,const修饰 *p ,*p是指针,现在被修饰为常量类型的。这就是常量指针(常量类型的指针)。此时*p为常量,*p的值无法修改,即不可以通过*p=20(解引用)来修改a的值。所以如果变量a被const修饰为常量,则指向a的指针 *p 也必须被const修饰。不修饰会报错。

        此时,虽然 *p 为 常量,值无法修改,但p不是,p没有被const修饰。所以我们还是可以通过p = &b 来修改p的指向。修改后 *p==20。

int a = 10, b = 20;
int* const q = &a;//等价于int const *q = &a;

         2)int* const q;‘*’在const之前。q被const修饰,q是常量,q又是int*(指针类型)的。所以这就是指针常量(指针类型的常量)。 q的值无法被修改,即无法通过 q = &b来修改q的指向,q的指向锁定为b。

        虽然q被修饰为常量,但 *q 没有被const修饰。所以我们可以通过 *q==20来修改a的值。

int a = 10, b = 20;
const int* const p = &a; //等价于int const* const p;

        3)const int* const p;p被const修饰为常量,p又是const int* 类型的,所以这就是常指针常量。此时,p与 *p 同时被const修饰,即既不可以通过p = &b 来修改p的指向,也不能通过 *p  = 20 来修改p所指向的a的值。

 3.const和二级指针的使用

        const在二级指针上的使用与const在一级指针上的使用相同。如:

	int a = 10, b = 20;
	int* p = &a;
	int* q = &b;
	const int* const* const t = &p;

        此时,t,*t,**t都被const修饰。即,不可以通过 t = &q 来修改二级指针t向一级指针p的指向;不可以通过 *t = &b 来修改t所指向的一级指针p的指向(可以通过p = &b 来修改);不可以通过 **t = 20 来修改t所指向的p指向的a的值(可以通过*p = 20,或a = 20 来修改a的值)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值