网站首页 > 文章精选 正文
指针是C语言之魂。随着const被引入C语言,形成了魔法般的组合。
你能说出下面六条语句的不同吗?
int* p1; // 1
const int* p2; // 2
int const* p3; // 3
int *const p4; // 4
const int *const p5; // 5
int const * const p6; // 6
第一条语句,没得说,声明了一个整数类型指针p1。
第二条,定义了一个整数类型指针p2。加上了限定词const,表示不能通过指针p来改变它所指向的对象的值。然而,p指向的对象并因此成为只读,其值通过其他方式可能发生变化。例如,
int n = 42;
const int* p2 = &n;
*p2 = 42; // 不可以
n = 13;
assert(*p2 == 13); // p2指向的n的值发生了变化
第三条语句在语法上等同与第二条,限定词const 放在紧靠类型,前后都行。也就是说,const int* 和int const *同义。
第四条,定义了一个整数指针p4,const在这里的作用是制约p4 -- p4不能改变它的指向。例如
int n = 42;
int *const p4 = &n;
int m = 13;
p4 = &m; // 不可以
第五条,定义了整数指针p5。通过p5不可以去改变它所指向的对象的值。不能改变p5的指向。例如,
int n = 42;
const int *const p5 = &n;
*n = 13; // 不可以
int m = 13;
p5 = &m; // 不可以
第六条与第五条同义,不赘述。
形式上看起来很吓人的const int *const 其实有一个很好的用处 -- 定义函数参数。
void print(const void *const pt);
如此以来,确保了在print函数体内,不能通过指针pt改变它指向的对象的值,同时,确保pt只指向该对象,且pt指向不可更改。也就是说,不能让pt指向其他对象。
希望这篇文章能让你更好理解C语言中指针和const,进而玩转魔法,让代码更精确表达用意。
喜欢就点赞。 更多精彩,请关注我
今日头条号/西瓜视频/抖音:IT之州
* 本文为原创文章,引用或转载请获得作者正式授权,并注明出处。
猜你喜欢
- 2025-03-17 C++|剖析函数参数为const引用时,要求其指向一个生成的临时变量
- 2025-03-17 c语言那些事儿:指针数组和数组指针傻傻分不清?
- 2025-03-17 C语言指针与函数(c语言指针函数的用法)
- 2025-03-17 C语言通用工具库的4个函数(c语言运行工具)
- 2025-03-17 C++ 指针总结(c++ 指针操作)
- 2025-03-17 C语言100题集合023-输入月份号并输出英文月份名
- 2025-03-17 TypeScript 使用let和const声明变量
- 2025-03-17 C语言之指针与数组(c语言中指针数组的使用方法)
- 2025-03-17 C/C++的const常量总结(c++ const详解)
- 2025-03-17 const关键字到底该什么用?(java中const关键字的作用)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)