【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

目录

常量指针和指向常量的指针有什么区别?

在C语言中,常量指针(Pointer to constant)和指向常量的指针(Constant pointer)是两个不同的概念。它们在声明和使用上有显著区别。以下是详细的解释和示例:

1. 指向常量的指针(Pointer to Constant)

定义:指向常量的指针是一个指针,该指针所指向的值是常量,不能通过该指针修改值,但指针本身可以指向其他地址。

声明方式:

c 复制代码
const 数据类型 *指针变量名;

示例:

c 复制代码
int a = 10;
int b = 20;
const int *p = &a; // p是指向常量的指针,指向a的地址

*p = 15; // 错误:不能通过p修改a的值
p = &b;  // 正确:可以让p指向b

解释:

  • const int *p 表示 p 是一个指向 int 常量的指针。通过 p 不能修改其指向的值。
  • 尝试修改 *p 会产生编译错误,因为 *p 被视为常量。
  • 可以改变 p 指向的地址,即可以让 p 指向另一个 int 类型的变量。

2. 常量指针(Constant Pointer)

定义:常量指针是一个指针,该指针本身是常量,不能改变指向,但可以通过该指针修改指向的值。

声明方式:

c 复制代码
数据类型 *const 指针变量名;

示例:

c 复制代码
int a = 10;
int b = 20;
int *const p = &a; // p是常量指针,指向a的地址

*p = 15; // 正确:可以通过p修改a的值
p = &b;  // 错误:不能修改p的指向

解释:

  • int *const p 表示 p 是一个常量指针,指向 int 类型的变量。p 本身是常量,即不能改变其指向的地址。
  • 可以通过 p 修改其指向的值。
  • 尝试改变 p 的指向会产生编译错误,因为 p 是常量指针。

3. 常量指针与指向常量的指针结合使用

有时,需要同时限制指针的指向和指向的值,这时可以将两者结合使用。

声明方式:

c 复制代码
const 数据类型 *const 指针变量名;

示例:

c 复制代码
int a = 10;
const int *const p = &a; // p是指向常量的常量指针,指向a的地址

*p = 15; // 错误:不能通过p修改a的值
p = &b;  // 错误:不能修改p的指向

解释:

  • const int *const p 表示 p 是一个常量指针,指向 int 常量。既不能修改 p 的指向,也不能通过 p 修改指向的值。

总结

  • 指向常量的指针:不能通过指针修改指向的值,但可以改变指针的指向。
  • 常量指针:不能改变指针的指向,但可以通过指针修改指向的值。
  • 指向常量的常量指针:既不能改变指针的指向,也不能通过指针修改指向的值。

这两种类型的指针在C语言中的具体使用场景会有所不同,理解它们的区别可以帮助更好地控制和管理程序中的数据和内存。

4. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中的常量指针和指向常量的指针有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论 ,这对我们非常重要。再次感谢大家的关注和支持LuckiBit

相关文章:

相关推荐
想学习java初学者5 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦6 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173656 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河6 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
MegaDataFlowers7 小时前
运行若依项目
java
lulu12165440788 小时前
JetBrains IDE 终极AI编程方案:CC GUI插件让Claude Code和Codex丝滑运行
java·ide·人工智能·python·ai编程
('-')8 小时前
八股复习2:Java Array list和Linked list
java·开发语言
逸Y 仙X8 小时前
Elasticsearch时间类型实战
java·大数据·elasticsearch·搜索引擎·全文检索
Gerardisite9 小时前
企微批量群发消息指南:用 QiWe 省掉人工操作
java·python·机器人·企业微信
wljy110 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++