C语言中const与指针

一个指针变量可以操作两个存储单元的值,一是地址值,即指针变量自己的值,改变地址值,就可以改变指针的指向。二是指针变量指向的存储空间的值,也就是通过对指针进行间接访问得到的值。在指针类型的形参前加上const修饰,目的就是只运行函数读取该指针指向的内容而不修改其内容。
定义指针时根据const的位置可以得到不同常值:常指针、指向常量的指针、指向常量的常指针。
(1)常指针
表示指针值在经过初始化之后不允许修改的指针。
语法:基类型名 *const 指针名=地址值;

int a=10,b=20;
int *const p=&a;
*p=20;//合法,相当于a=20
p=&b;//非法

定义了常指针p,说明p只能用于读取而不能修改,因此定义时就必须初始化使其有确切的地址值。
(2)指向常量的指针
所指向的内容不允许通过该指针修改
语法:基类型名 const * 指针名;
(const 基类型名 * 指针名;)

int a=10,b=20;
int const * p=&a;
*p=20;//非法
p=&b;//合法

const修饰*指针名,表示指针指向的内容不允许通过指针修改,但指针本身是变量,可以改变。但是可以通过直接引用方式对a的值做出修改,如a=20。
(3)指向常量的常指针
其指针本身以及指向的内容都不允许被修改。
语法:const 基类型名 *const 指针名=地址值;

int a=10,b=20;
const int * const p=&a;
*p=20;//非法
p=&b;//非法

两个const分别表示指针以及指针指向的内容都是常量,定义时就必须初始化使指针具有确定的地址值。

其中,指向常量的指针最为常用,特别是函数中,能对参数起保护作用

void change(const int *p)
{
    *p=20;
    printf("%d",*p);
}
void main()
{
    int a=10;
    change(&a);
}

通常在需要借助指针共享实参数组空间,但是又不希望通过该指针修改实参数组元素的场合,会在指针形参前加入const定义为一个指针常量的指针来实现。

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值