c&c++ 指针

1、int &*p; 是不正确的,*与p靠得最近,所以p是一个指针,但是这个指针的类型是int &,所以这个是错吴的, 因为不能创建引用的指针。

int *& p, 是正确的, &与p靠得最近,所以p是一个引用,这个引用的类型是int*,也就是一个指针变量的引用,但是必须初始化,否则也是错误的。.
    int a;
    int& ref = a;  
    int* d = &a;   
    int* b = &ref; 
    int&* e = &b; ×
    int*& c = d;   

2、int * const  常量指针

指针是一个对象,而引用不是,引用是所指对象的别名。
    1. 所以指针的用法可以像其他对象类型一样,允许把指针本身定义为一个常量。
    2. 常量指针必须初始化,一旦初始化完成,它的值(也就是它所放在指针中的地址就不能改变)
    3. 而它解引用的值可以随着它所指向地址中值的变化而变化。

    int * const p;  // ERROR  常量指针必须初始化

    int i = 10;
    int j = 20;
    int * const p = &i;
    p = &j;         // ERROR  p就是一个常量,所以不能给p赋值
    
    int i = 10;
    int* const p = &i;
    i = 20;         // OK 解引用*的值 可以随着它所指向地址中的值的变化而变化

指向常量的指针(const int * 和 int const *)

  1. 两者的作用是一样的,都是一个指向常量的指针。
  2. 可以不用先初始化,即指针没有指向任何内容。
  3. 指针指向的内容是一个常量(即地址),可以通过改变常量(地址)中的值来改变指针解引用的值。但是不能直接解引用指针来改变值,因为这里的指针是一个常量。
  4. 也可以将另外一个常量赋值给指针,来改变指针所指向内容的值。

    int i = 10;
    int j = 20;
    const int * p = &i;
    *p = 20;                // ERROR 不能直接解引用指针来改变值
    p = &j;                 // OK

若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。

若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值。

若在*之前有const限定符且在*之后也有const限定符,则ptr与*ptr都被限定。也就是说,ptr既不可以改变其所指向的对象,也不能通过该指针修改其所指向对象的值。

只要在*之后有const 限定符,则该指针在声明时必须初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值