c语言中指针常量和常量指针

目录

概述

指针常量(Pointer to Constant)和常量指针(Constant Pointer)是C和C++中用于描述指针和常量的组合概念。

指针常量(Pointer to Constant)

指针常量本质是一个常量,它的值不能改变,即指针始终指向同一个地址。但通过指针可以修改所指向对象的值。

int* const ptr;//表示ptr是一个常量指针,指向一个整型对象。

常量指针(Constant Pointer)

常量指针本质是一个指针,它指向的对象是常量,即指针指向的对象的值不能改变。但指针本身是可变的,可以指向不同的对象。

const int* ptr;//表示ptr是一个指针常量,指向一个整型常量对象。

指针常量与常量指针的区别

  • 指针常量的重点在于保护指针的值,指针本身是不可变的,不能指向不同的对象,但可以通过指针来修改所指向的对象的值。
  • 常量指针的重点在于保护所指向的对象的值,指针本身是可变的,可以指向不同的对象,但不能通过指针修改所指向的对象的值。

指向常量的指针常量

const int * const ptr;//指向常量的指针常量,即ptr本身及其指向的对象都不能变

示例

c 复制代码
// 指针常量
int num1 = 10;
int num2 = 20;
int* const ptr = &num1; // ptr是一个常量指针,指向num1
*ptr = 15; // 合法,通过指针修改了num1的值
// ptr = &num2; // 非法,常量指针的指向是不可变的

// 常量指针
const int num1 = 10;
const int num2 = 20;
const int* ptr = &num1; // ptr是一个指针常量,指向num1
// *ptr = 15; // 非法,不能通过指针修改所指向的对象的值
ptr = &num2; // 合法,指针可以指向不同的对象

Tips:

const关键字修饰*p或者int *p,就是常量指针,即指向常量的指针;

const关键字修饰p,就是指针常量,即指针是一个常量。

总结

指针常量是指指针的值不能改变,即指针始终指向同一个地址,但可以通过指针修改所指向对象的值;

常量指针是指指针指向的对象是常量,即指针指向的对象的值不能改变,但指针本身是可变的,可以指向不同的对象;

因此,指针常量保护了指针的指向地址不变,但允许修改所指向对象的值;常量指针保护了所指向对象的值不被修改,但允许指针指向不同的对象。

相关推荐
superman超哥4 分钟前
仓颉性能瓶颈定位方法深度解析
c语言·开发语言·c++·python·仓颉
leaves falling12 分钟前
c语言-static和extern
c语言·开发语言
黎雁·泠崖18 分钟前
C 语言的内存函数:memcpy/memmove/memset/memcmp 精讲(含模拟实现)
c语言·开发语言
HUST23 分钟前
C 语言 第八讲:VS实用调试技巧
运维·c语言·开发语言·数据结构·算法·c#
Yupureki1 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-二分算法
c语言·开发语言·数据结构·c++·算法·visual studio
liujing102329292 小时前
stm32 开发的 c_cpp_properties.json 配置
c语言·stm32·嵌入式硬件
胖咕噜的稞达鸭2 小时前
【C语言进阶】死磕指针:从内存原理到指针数组的深度解析
c语言·开发语言·网络
superman超哥2 小时前
仓颉Result类型的错误处理模式深度解析
c语言·开发语言·c++·python·仓颉
进击的小头3 小时前
01_嵌入式C与控制理论入门:从原理到MCU实战落地
c语言·单片机·算法
zore_c3 小时前
【数据结构】堆——超详解!!!(包含堆的实现)
c语言·开发语言·数据结构·经验分享·笔记·算法·链表