常量指针、指针常量、指向常量的指针常量

1.常量指针

     ❶全称指向一个常量的指针,核心为指针。即一旦指向一个地址,该地址的值不能通过该指针来修改(但可经由指向的变量间接修改);可以更改该指针的值(更改指针指向的地址)。

     ❷定义 const 在“*”左侧。const int *p    int const *p 

     ❸使用

int a = 5;
const int b = 8;
const int *c = &a; //合法
*c = 6; // 非法。但可间接修改c指向的对象的值:a = 6;
const int *d = &b; // 更改地址,合法

   ❹函数形参为常量指针但可接受非常量字符串。目的在于限制了外部变量在子函数内部被更改。
                   int strcmp(const char *str1, const char *str2);

2.指针常量

     ❶全称指针类型常量(地址不能更改),核心为常量,即值为常量的指针。即一旦指向一个地址,不容许修改指针值(更改指向地址);但可以经过指针更改地址存储的内容。

   ❷定义const 在*右侧 。int *const b。
           注意因为为常量,声明时必须赋给初值,一旦赋值,不可变更。

     ❸使用

char *a = "abcde1234";
char *b = "bcde";
char *const c = &a;
a[0] = 'x'; // 更改内容,合法。
*c[0] = 'x' // 更改内容,合法。


3.指向常量的常量指针

    ❶全称:指针指向存储常量的常年地址。指针指向地址不能更改,地址的存储内容也不能更改

  ❷定义和使用:
      const int a = 25;
      const int * const b = &a;


4.总结 

char *a = "abcde1234";
const char *b = "bcde"; // b是常量指针
char *const c = &a;  // c指针常量
const char *const d = &b; // d是指向常量的指针常量

    ❶ b是指向常量的指针变量,当b指向别的字符串,d仍然指向b初始的字符串。
    ❷ b此处静态编译理解成字符串常量指针,不能通过指针b更改内容。

char a[] = "hello";
char b[] = "world";
const char *p1 = a;
char* const p2 = b;

  对于以上定义 p1++即移动指针合法,但是修改不合法。对于p2, *p2='c'即修改合法,但是移动p2不合法。



本文参考:

   常量指针与指针常量的区别(转帖)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值