const 修饰的一级指针和二级指针

一、const修饰的一级指针(关于指针的简要介绍在这里,建议在阅读本篇博客前浏览一下点击打开链接

       const int * p   int const * p  
       int * const

被const修饰的符号,我们称为常变量(具有常量的属性),c++中就是常量。例如:


   const int a = 10;
我们定义了一个常变量整形a,整形a具有那些特征呢?
你只能使用a给别的变量赋值,但切记不能给a进行赋值,编译器认为a的内存是不能修改的,因此试图给a的赋值操作都会失败,编译阶段都不会通过



1.const int * p 和 int *const p的区别(关键const修饰谁

 const只修饰离他最近的类型符号 
以下探讨一下 const int * p 修饰的是谁:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a = 10;
 int b = 20;
 const int * p = &a;
 //*p = 30;//error:表达式必须是可修改的左值
 p = &b;//ok
 printf("%d ", *p);//20
 system("pause");
 return 0;
}

证明出 const int * p 中const 修饰的是 int ,则 const int * P指的是: *p所代表的整形值是 常量不能被直接修改,而 指针 p本身是 变量可以被修改。(不能通过修改p指针指向地址a的数据来修改*p的值,但可以通过修改p指针本省所储存的地址来修改*p的值。)
另外
  const int * p 和 int const * p 是一样的,因为与int const * p 中与const相邻的类型只有int,const修饰的还是int。  

以下探讨一下 int *const p 修饰的是谁:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a = 10;
 int b = 20;
 int *const p = &a;
 *p = 30;//ok
 //p = &b;//error:表达式必须是可修改的左值
 printf("%d ", *p);//20
 system("pause");
 return 0;
}

可以看出,int *const p 中const修饰的是int *,int *const p 指的是:指针p本身是常量不能被修改。而*p所代表拍的是整形变量可以被直接修改。(指针p本身存储的地址不能被修改,而指针p指向地址a的值可以被修改。)




二、const修饰的二级指针
       const int ** p
       int ** const p
       int * const * p
 相必看完上面const修饰的一级指针,上面const修饰的二级指针前两个 const int ** pint ** const p 很好就理解了。
1.const int ** p 表示**p代表的整形内存放的常量不能够被修改。而指针p本身变量可以被修改。( const修饰的是int

2.int ** const p 表示指针p本身常量不能被修改。而**p代表的整形内存放的值变量可以被修改。( const 修饰 的是int **

3. int * const * p 是一个二级指针,const 修饰 的是int *,代表指针*p的值是常量不能被修改。而**p所代表的整形内存放的是变量可以被修改指针p本身是变量也可以被修改。(通俗来说,就是二级指针p所指向的一级指针*p不能被修改,而**p所代表的整形,可以被修改。指针p本身,也可以被修改。

  由于害怕一篇博客太过冗长,知识点太散乱。const修饰的二级指针中的一些重要问题下篇博客进行详细介绍。
本人初学者一枚,能力有限,难免出现纰漏,希望大家可以给出指正。

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值