关于const int * ,int const * 以及 int * const 的区别

总结:(1)const 在*前面,就代表指针为常量指针,不可以更改指针指向。

           (2)const 在*后面,代表指针指向常量,可以更改指针指向,但不可通过指针更改指向的数。

1. 常量指针int * const p;

一个常量指针,必须初始化,之后它指向的地址就不能改变。就因为它是常量。常量是不可以被赋值的。

#include <iostream>
using namespace std;
int main()
{
    int i = 10;
    int j = 20;
    int * const p = &i;
    p = &j;//p就是一个常量,所以不能给p赋值
    return 0;
}

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

        声明一个指向常量的指针a:

        int y = 1;

        const int * a = &y;

        该声明指出,a指向一个const int,这里为1,因此不能使用a来修改这个值。换句话说,*a的值为const,不能被修改,但是a的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对a而言,这个值是常量。a指向y,而y不是const,可以通过y变量来修改y的值,但不能使用a指针来修改。

 

四,牛客网例题分析

         请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。

正确答案: B   你的答案: C (错误)

const int const *x = &y;

int * const x = &y;

const int *x = &y;

int const *x = &y;

const int * const x = &y;

       我们始终记住若const限定符在*之前,则const限定的是*ptr而不限定ptr。也就是说,ptr可以改变其所指向的对象,但不能通过该指针修改其所指向对象的值。
若const限定符在*之后,则const限定的是ptr而不限定*ptr。也就是说,ptr不可以改变其所指向的对象,但能通过该指针修改其所指向对象的值。
若在*之前有const限定符且在*之后也有const限定符,则ptr与*ptr都被限定。也就是说,ptr既不可以改变其所指向的对象,也不能通过该指针修改其所指向对象的值。
只要在*之后有const 限定符,则该指针在声明时必须初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值