文章插图
C语言中,const 的作用是把变量变为一个只读的变量 。与指针结合起来,有以下几种用法,下面分别进行说明 。
- const int p;
- const int *p;
- int * const p;
- const int * const p;
即这个变量就只能作为右值(赋值给别人),不能成为左值(接收别人的赋值) 。
文章插图
const int p 与 int const p 是等价的 。
2、const int *p当把 const 放最前面的时候,它修饰的就是 *p,*p 表示的是指针变量 p 所指向的内存单元里面的内容,即这个内容不可变 。
文章插图
const 可以禁止指针变量 p 修改变量 x 中的值,但变量 x 自己也可以修改自己的值 。如下图所示,p指向的地址没有变,但变量 x 的值可以变 。
文章插图
另外,p 中存放的是指向的内存单元的地址,这个地址是可变的 。如下图所示,p 开始指向 x ,后面修改为指向 y 。
文章插图
const int *p 与 int const *p 是等价的 。
3、int * const p这里 const 修饰的是 p,所以 p 中存放的内存单元的地址不可变,但内存单元中的内容是可变的 。即 p 的指向不可变,p 所指向的内存单元的内容可变 。
此时,p 中存放的内存单元的地址,必须在定义的同时初始化,如下图所示 。
文章插图
而 p 所指向的内存单元的内容可变,如下图所示 。
文章插图
4、const int * const p此时 *p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变 。
文章插图
总结一下,用 const 修饰指针 p 时,主要看 const 和 * 的位置:
- const int *p:p可变,p指向的内容不可变
- int * const p:p不可变,p指向的内容可变
- const int * const p:p和p指向的内容都不可变
【C语言关键字const和指针结合的使用】
推荐阅读
- C语言访问字符串数组元素的方式
- 头昏脑胀怎么治疗?
- C语言厉害在哪?
- C语言、嵌入式重点知识:回调函数
- C语言指针经典知识汇总
- 移动应用开发的六大编程语言
- 用C语言编写CPU使用率限制程序
- 跨平台的C语言网络框架库acl
- 用最简单的语言让你懂得如何选择四驱车:五类四驱系统特点详解
- 16种编程语言是如何命名的?