首页 > 其他分享 >指针常量和常量指针的区别

指针常量和常量指针的区别

时间:2024-08-10 17:26:10浏览次数:15  
标签:const 常量 指向 区别 int ptr 指针

1. 指针常量(Constant Pointer)

  • 定义: 顾名思义指针常量是一个指针,它本身是常量,指向的地址不能改变,但可以改变指针所指向的值,(速记:指针是常量)

  • 声明: 在 C 或 C++ 中,可以使用 const 关键字来声明指针常量。例如:

int a = 10;
int * const ptr = &a;
  • 行为: 在这个例子中,ptr 是一个指针常量。ptr 的值(即它指向的地址)不能被改变,但可以通过 ptr 修改 a 的值。例如:
*ptr = 20;  // 修改 a 的值
int b = 20;
// ptr = &b;  // 错误:不能改变 ptr 的值

2. 常量指针(Pointer to Constant)

  • 定义: 常量指针是一个指向常量的指针,指针所指向的值是常量,不能改变,但可以改变指针的值(即它指向的地址)。(速记:常量的指针)

  • 声明: 在 C 或 C++ 中,可以使用 const 关键字来声明常量指针。例如:

int a = 10;
const int *ptr = &a;
  • 行为: 在这个例子中,ptr 是一个常量指针。ptr 的值(即它指向的地址)可以改变,但不能通过 ptr 修改 value 的值。例如:
// *ptr = 20;  // 错误:不能修改 ptr 指向的值
int b = 30;
ptr = &b;  // 可以改变 ptr 的值

3.指向常量的常量指针

  • 定义:上面两种的结合体,指针的指向和指针指向的值都是常量,都不能修改
int a = 10;
const int * const ptr = &a;

下一篇:函数指针与指针函数的区别

总结:

指针常量:指针的指向不可以修改,但是指针指向的值可以修改 记:指针是常量

常量指针:指针的指向可以修改,但指针指向的值不可以修改 记:常量的指针

指向常量的常量指针:指针的指向以及指针指向的值都不可以修改

标签:const,常量,指向,区别,int,ptr,指针
From: https://blog.csdn.net/weixin_40323532/article/details/141093155

相关文章

  • Get 和 Post 的区别?什么情况下用到
    区别:1、GET使用URL或Cookie传参。而POST将数据放在BODY中2、GET的URL会有长度上的限制,则POST的数据则可以非常大3、POST比GET安全,因为数据在地址栏上不可见最本质的区别Get是用来从服务器上获得数据,而post是用来向服务器上传递数据Get/Post使用......
  • Java中字符串的常量池
    计算机存储中存在一个堆区域,堆区域中存在一个常量池,当申请了字符串变量后,会将值放入常量池中,下次申请新的变量时,会优先从常量池中查找,如果常量池中已经存在,则变量会直接指向常量池中的值,从而节省空间(jdk1.8之后的字符串常量池存在于堆中) Stringx1="aaa";//在常量池......
  • C语言指针变量详解(函数指针,函数指针数组,转移表)
    指针变量 1.字符指针变量在指针的类型中我们知道有⼀种指针类型为字符指针char*;⼀般使⽤:intmain(){charch='w';char*pc=&ch;*pc='w';return0;}还有⼀种使⽤⽅式如下:intmain(){const......
  • C语言指针与数组详解(指针数组,数组指针,⼆级指针)
    指针与数组1.数组名的理解1.1结论:数组名是数组⾸元素的地址,但是有2个例外。      •sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩     •&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数......
  • Python time模块与datetime模块的区别
    时间方面的编程在开发过程中是很常见的,而Python提供了datetime和time这两个关于时间的模块。接下来,我们将讨论这两个模块中的函数有什么区别。time模块:如果你想要获取当前的本地时间,那么首先你需要运行time.time()来获取当下的时间戳。importtime#获取目前的时间戳ti......
  • 工厂模式与策略模式的区别及其在Java中的应用
    工厂模式与策略模式的区别及其在Java中的应用1.引言在软件开发中,设计模式被广泛应用于解决各种常见问题,提高代码的可维护性、可扩展性和可读性。工厂模式(FactoryPattern)和策略模式(StrategyPattern)是两种非常重要的设计模式,它们解决了不同的设计问题,并且在许多情况下可......
  • 指针数组、回调函数
    指针+二维字符型数组char s[][10]={"hello","world","china"};        char(*p)[10]=s;  //p指向二维数组s ----- *(*(p+i)+j) <=> s[i][j]        char[10] s[3];  //此时二维数组的元素是一个一维数组,定义了一个存放字......
  • 指针、快速排序
    (一)指针1.指针变量初始化(1)如果指针变量没有初始化,此时是随机值。初始化可以让指针变量有明确指向。eg:①int a=10;     int *p=&a;②int *p=NULL;//0号地址----空指针(2)赋值:方式①: int *p;  p=NULL;方式②: inta;  int*p; p=......
  • 指针、字符串函数
    (一)指针操作一维字符型数组const关键字(只读)eg:(1)int *p;  //基类型(目标类型)(2)int a= 10;   ①const int *p=&a;  //const限定是基类型,表示不能通过*p的方式修改基类型的数据   ②int const *p=&a;  //与①等价     ......
  • snap和apt的区别简单了解[]
      Linux中没有tree命令的时候提示安装的时候出现了两个命令,简单看了看两者有何区别(一般用apt就可以了):  sudosnapinstalltree 和 sudoaptinstalltree 这两个命令都是用来安装 tree 命令行工具的,但它们使用的是不同的包管理器和软件源。Snapsnap 是由Canoni......