常量指针和指针常量的区别

    首先分别搞清楚常量和指针是什么东西。

1 常量    

常量是值一旦确定就无法改变的的量。在C++中的申明方式是:

    int const n=100;或者 const int n=100;

这两种方式的效果是一样的,需要说明的是常量一旦申明就要给它值,而且值是不能改变的,常量是存在内存中的字符常量区中

2 指针

    指针在C++中的申明方式:

    int* p1; double* p2;

    而指针其实是一个变量,只不过这个变量的值是一个逻辑地址。所以在64位和32位的机器之上的指针类型的大小是不一样的。因为32位机器的理论最大地址空间是2^{32}BYTE=4GB,32位机器就是使用一个32位的二进制数来表达地址。所以32位机器上面的指针的大小是4KB(和指针指向的类型无关)。同理64位机器上面的指针的大小就是8KB。

    但是这个也和编译器的类型有关,如果在64位的机器中使用32位的编译器,那么指针也是4KB。这个和逻辑地址和物理地址的转换有关,这里不再赘述。

    既然指针大小和类型无关那为什么还要有类型呢?

    指针的值只是提供了首地址,而类型提供了偏移。通过首地址+偏移的方式可以定位一个符合类型的一段内存,然后再以该类型来解读该内存中的二进制数据。

3 指针常量

    C++中的申明方式:   int number=100; 

                                       int* const p =  number; 

读法:*代表指针,const代表常量,所以先后顺序读作“指针常量”。 

       本质是常量,并用指针来修饰它(后边的两个字是主体,前面的两个字是修饰)。说明它是一个指针类型的常量(既然是常量那么它就被存在了字符常量区中)。所以这个指针的值是无法被改变的(这个指针指向了一个固定的地址)但是这个地址的内容是可以改。

4 常量指针

C++中的申明方式: int  const* p;或者const int* p;

读法:const代表常量,*代表指针,所以先后顺序读作“常量指针”。

     本质是指针,用常量来修饰(后边的两个字是主体,前面的两个字是修饰)。说明它是一个指向常量的指针。所以这个指针的值是可以改变的。但是指针指向的地址的内容是无法改变的(这个指针指向了字符常量区中的一个地址)。

int const 和const int都是一种修饰申明常量的方式。所以int const* p和const int* p都是申明常量指针的方式。

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值