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

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;        // 错误;指向地址存储的值不可以被修改

扫描二维码关注公众号,回复: 11225163 查看本文章

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。

猜你喜欢

转载自www.cnblogs.com/programmer-home/p/12925917.html