首页 > 其他 > 详细

const int、int const、const int*、int const*、int *const、const int *const

时间:2020-05-20 21:32:06      阅读:47      评论:0      收藏:0      [点我收藏+]

const是C语言中的一个关键字,其所修饰的变量或者对象的值是不允许被修改的。

1、const int 和 int const

const int 和 int const的作用完全一致,无任何区别,都是表示其所修饰的变量的值禁止被修改。

 

2、const int*

const int* 修饰的指针,其指向的地址(即指针变量的值)可以修改,但所指向地址存储的值不能被修改。

int a = 1, b = 2;
const int* p;
p = &a;
p = &b;       // 指针指向的地址可以改变
*p = 3;        // 错误;指向地址存储的值不可以被修改

 

3、int const*

int const* 修饰的指针,其指向的地址(即指针变量的值)可以修改,但所指向地址的值不能被修改。

int a = 1, b = 2;
int const*  p; 
p = &a;
p = &b;       // 指针指向的地址可以改变 
*p = 3;        // 错误;指向地址存储的值不可以被修改

 

4、int *const

int *const 修饰的指针,其指向的地址(即指针变量的值)不可以修改,但所指向地址存储的值可以被修改。

int a = 1, b = 2;
int* const p=&a;     // int *const修饰的指针必须声明的同时就初始化,不允许声明和初始化分开进行。
*p = 3;                    // 指向地址存储的值可以被修改
p = &b;                   // 错误;地址不可以改变

 

5、const int *const

const int *const 修饰的指针,其指向的地址,以及指向地址的值,均不可以被修改。

int a = 1, b = 2;
const int *const p = &a;    // const int *const修饰的指针必须声明的同时就初始化,不允许声明和初始化分开进行。
p = &b;                             // 错误;地址不可以改变
*p = 3;                              // 错误;所指向的值不可以改变

 

这里,针对const指针的情况可以总结下规律,即针对p、*p,const关键字紧挨着谁,就表示修饰的是谁。

const int *p、int const *p中,const均紧挨着*p,因此const修饰的是*p,因此p的值可以改变,但*p的值不能修改;

int *const p,const紧挨着p,因此const修饰的是p,因此p的值不可以改变,但*p的值可以改变;

const int *const则表示p、*p均不能被改变。

 

注:单个const,不存在const *int写法;双const,不存在const *int const写法,即*号永远只能出现在类型int后面,不能出现在其前面。

问,双const的情况下,是否存在const const int*、const int const*的写法,其代表何种含义?

注意,const int const*和int const*的含义一致,也即int const*前面无论加多少个const,都是一个意思,你完全可以定义出一个指针const const const const int const *p。

同理,你也可以定义出一个指针const const const const int const *p。

const int、int const、const int*、int const*、int *const、const int *const

原文:https://www.cnblogs.com/programmer-home/p/12925917.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!