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

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.mrgr.cn/news/99309.html

相关文章:

  • 堆栈溢出 StackOverflowError 排查
  • 辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 存储器综合:内存条
  • [SpringBoot]配置文件(1)
  • 查看matlab函数帮助文档的方法
  • 嵌入式工程师( C / C++ )笔试面试题汇总
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • 前端笔记-Vue3(上)
  • Linux学习笔记|入门指令
  • Linux:权限相关问题
  • Linux 入门十一:Linux 网络编程
  • 辛格迪客户案例 | 上海科济药业细胞治疗生产及追溯项目(CGT)
  • 3200温控板电路解析
  • 推荐系统/业务,相关知识/概念1
  • 【Maven】项目管理工具
  • 诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能
  • 无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)
  • 在Ubuntu 18.04下编译OpenJDK 11
  • Emacs入门篇2:安装evil插件以便vi老用户可以使用VI快捷键来快速使用Emacs