const限定符和指针的关系

当有const参与到指针的赋值操作时,经常让人困扰,主要是两个方面

1. int const *p ,const int*p ,int *const p...这些到底是怎么分辨

2.const int num=100;

   int *p=#

上面的代码会什么会有warning信息出现

针对第一个问题,可以这么理解:

凡是出现在*之前的const限定符,都是在限定指针指向的对象

    int const*p 和const int *p其实是一样都,都是说指针指向的是一个const int;

凡是出现在*之后的const限定符,都是在限定指针本身

    int * const p 这是一个常量指针,只能指向int类型

针对第二个问题,ANSI C标准有描述

    任何指针类型赋值操作,都要满足两个条件:

    1. 两个操作数都指向相容类型的指针,不管是否包含限定符

    2.左侧指针指向的类型必须具有右侧指针指向的类型的全部限定符

    举个例子:

   

 const int a=100;
 const int *p1=&a;
 int *p2=&a;

p1的赋值是没问题的,p2会有warning信息,因为左侧指针指向的类型没有限定符,右侧指针指向的是带有const限定符的int类型。这样的后果就是可以通过p2指针修改掉a的值,导致a不再是const类型。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值