当前位置: 首页 > java >正文

C语言高频面试题——常量指针与指针常量区别


1. 常量指针(Pointer to Constant)

定义:

常量指针是指向一个常量数据的指针,即指针指向的内容不能通过该指针被修改。

语法:
const int* ptr;

或者:

int const* ptr;
解释:
  • const修饰的是指针指向的内容(即int),表示指针指向的数据是只读的。
  • 指针本身可以改变指向其他地址,但不能通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
const int* ptr = &a;// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误// 正确:可以改变指针的指向
ptr = &b; // ptr现在指向b
总结:
  • 指针可以指向不同的地址
  • 不能通过指针修改所指向的值

2. 指针常量(Constant Pointer)

定义:

指针常量是一个固定的指针,指针本身的值(即指向的地址)不能改变,但可以通过该指针修改所指向的内容。

语法:
int* const ptr = &a;
解释:
  • const修饰的是指针本身,表示指针一旦初始化后,其指向的地址不能改变。
  • 可以通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
int* const ptr = &a;// 正确:可以通过ptr修改a的值
*ptr = 30; // a现在变为30// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
  • 指针的指向地址固定,不能改变
  • 可以通过指针修改所指向的值

3. 两者的组合:指向常量的指针常量

如果同时限制指针本身的值和指针指向的内容都不能改变,可以使用以下语法:

语法:
const int* const ptr = &a;
解释:
  • 第一个const修饰的是指针指向的内容,表示内容不可修改。
  • 第二个const修饰的是指针本身,表示指针的指向地址不可改变。
示例代码:
int a = 10, b = 20;
const int* const ptr = &a;// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
  • 指针的指向地址固定,不能改变
  • 不能通过指针修改所指向的值

4. 总结对比

特性常量指针 (const int* ptr)指针常量 (int* const ptr)指向常量的指针常量 (const int* const ptr)
指针指向的地址是否可变
指针指向的内容是否可变

http://www.xdnf.cn/news/1023.html

相关文章:

  • 智慧能源安全新纪元:当能源监测遇上视频联网的无限可能
  • 消息队列知识点详解
  • 做虚拟化应该怎么选择美国服务器?
  • 利用人工智能(AI)增强IT运营,提高IT管理效率
  • Redis 事务
  • Linux基础学习--linux的文件权限与目录配置
  • [FPGA基础] 时钟篇
  • 第 5 篇:初试牛刀 - 简单的预测方法
  • Spring AI Alibaba Graph基于 ReAct Agent 的天气预报查询系统
  • Kubernetes相关的名词解释Worker(12)
  • MyBatis-Plus 防止 SQL 注入最佳实践指南
  • 空间注意力和通道注意力的区别
  • React vs Vue:性能对决
  • 12 机器数与编码方式详解:原码、反码、补码及其转换与运算应用
  • Canvas入门教程!!【前端】
  • 2025年教师资格证笔试考试核心内容
  • 【Linux】客户端 connect 断线重连
  • 知擎世纪:大模型时代知识库的正确建立法则
  • 信创项目管理系统实施难点,5大应对策略
  • lvgl 布局管理
  • ECA 注意力机制:让你的卷积神经网络更上一层楼
  • 考研系列-计算机网络-第四章、网络层
  • Java第五节:继承thread类创建线程
  • 算法之分而治之
  • AI模型开发平台功能特色
  • 动态LOD策略细节层级控制:根据视角距离动态简化远距量子态渲染
  • 算法-策略(递归,二叉搜索)
  • Day-1 漏洞攻击实战
  • 74.搜索二维矩阵
  • Easysearch Rollup 相比 OpenSearch Rollup 的优势分析