const和C指针

转载:原文链接

const和C指针

众所周知,C中可以使用const来声明常量,即限定变量的值不可以修改。
当把const用在指针上面的时候,他有两个左右:

  1. 指针本身不能修改
  2. 指针指向的值不能被修改

修改指针和修改指针的值的区别

int main(){
	int a = 10, c = 10, *b = &a;
	b = &c;  // 这一步叫做修改指针
	*b = 20  // 这一步叫修改指针的值
}

const在指针的用法

如下,定义一个指针为:int * const a表示指针a本身不可以被修改,但指针a指向的值可以被修改:

int num = 10, num2 = 30;
int * const a = #
*a = 20;  // 这一步操作是合法的
a = &num2;  // 这一步操作是非法的

如下,定义一个指针为:int const * a表示指针a本身可以被修改,但指针a指向的值不可以被修改:

int num = 10, num2 = 30;
int const *a = #
a = &num2;  // 这一步操作是合法的
*a = 20;  // 这一步操作是非法的

若把以上两种形式合在一起,也就是定义一个指针为:int const * const a,则指针a本身和其指向的值都是不可以被修改的。

int num = 10, num2 = 30;
int const * const a = #
a = &num2;  // 这一步操作是非法的
*a = 20;  // 这一步操作是非法的

使用强制类型转换

当我们使用强制类型转换的时候,可以强制修改一些东西。

int num = 10, num2 = 30;
int const * a = #
a = &num2;  // 这一步操作是非法的
*a = 20;  // 这一步操作是非法的

int *b = (int *)a
*b = 20;  // 这一步操作是合法的

通常这种操作没有意义。

const的位置

值得注意的是,const int *aint const *a是完全一样的。
当的同一行定义多个变量的是后:

int const *a, *b, c;

是等价于

int const *a;
int const *b;
int const c;

即所有的部分都定义为了const,表示ab指向的值不能改,c的值不能该。
同理,

const int *a, *b, c;

是等价于

const int *a;
const int *b;
const int c;

该定义效果是等价于int const *a, *b, c的。
若是如下形式:

int *const a, *b, c;

则是等价于

int *const a;
int *b;
int c;

const只对a生效,对bc是不生效的。

总结

const*前面表示该指针的值不能被修改,在*后面表示该指针本身不能被修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值