C++ 常量指针和指针常量

这篇具有很好参考价值的文章主要介绍了C++ 常量指针和指针常量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般情况下,经常遇到下面这三种情况:

// 下面两种其含义一样,意义是创建的指针指向一个const int 类型的值
const int* ptr = &a;   
int const* ptr = &a;

// const位于 * 之后,用于修饰指针本身,意思是指针本身的值是一个 const 
int* const ptr = &a;

const int* ptr && int const* ptr

如上所述,const int* ptr = &a 与 int const* ptr = &a具有相同的意义,它们创建的指针指向一个 const int 类型的值。这意味着您可以通过这些指针访问所指向的值,但不能通过指针修改这个指向的值。然而,这些指针本身是非 const 的,所以它们可以再指向其他地址(指向其它值对应的地址),以下是对这种指针进行操作的例子:

int a = 42;
int b = 21;
const int* ptr = &a;

*ptr = 30;  // 编译错误:不能通过 const int* 修改所指向的值
ptr = &b;   // 允许:指针本身是非 const 的,可以重新指向其他地址

在 C++ 中,const int* ptr 这样的声明具有特定的用途和优点。这是一个指针,它指向一个常量整数(const int 类型)。这意味着您可以使用这个指针来访问它所指向的值,但不能修改这个值。以下是使用 const int* 类型指针的一些原因和优势:

  • 强制只读访问:当你希望确保通过指针来访问数据时,不会意外地修改所指向的值时,可以使用 const int* 指针。这种只读访问可以帮助你编写更安全符合预期的代码,避免潜在的错误。

  • 操作常量数据:当你需要处理常量数据(例如,字符串字面量或其他const变量)时,const int*指针允许你安全地访问这些值。试图使用非 const 指针来访问这些值会导致编译错误。

  • 保持函数参数的不变性:当你编写一个函数,该函数接受指向整数的指针作为参数时,可以声明参数为 const int* 类型,以确保该函数不会无意中修改指针所指向的数据。这有助于提高代码的可靠性和可读性。

在 C++ 中,int const* ptr = &a; 表示创建一个指向 const int 类型的指针 ptr,并将其指向变量 a 的地址。这意味着您可以通过这个指针来访问所指向的值,但不能修改它。重要的是,ptr 所指向的变量 a 可以是非 const 类型的变量。const 关键字修饰的是指针对所指向的值的访问方式,而不是所指向的值本身。const关键字只是为了指针无法直接修改指向的值,指向的值本身可以是非const的。

int* const ptr

int* const ptr = &a;:这里的 const 修饰符位于 * 之后,修饰指针本身。这意味着所创建的指针是一个 const 指针,它指向一个非 const 的整数。我们可以通过这个指针来修改它所指向的值,但这个指针本身不能再指向其他地址。以下是对这种指针进行操作的例子:

int a = 42;
int b = 21;
int* const ptr = &a;

*ptr = 30;  // 允许:指针指向非 const int,可以修改所指向的值
ptr = &b;   // 编译错误:不能更改一个 const 指针的指向

在实际编程中,使用 int* const ptr = &a; 这种写法可以生成一个始终指向固定地址的 const 指针。这有助于确保程序始终访问相同的内存位置。以下是一些常见的应用场景:

  • 保护缓冲区、数组和数据结构起始地址:当处理缓冲区、数组或其它数据结构时,如果需要确保始终以相同的起始位置操作,可以使用这种形式的指针。
  • 同步数据操作:当需要在多线程环境中同步对内存的访问时,固定指针可以确保各线程始终从相同的位置读取或写入数据。

这些只是一些例子,实际编程场景可能更为丰富。总之,在实际编程中,int* const ptr = &a 这种写法的应用场景包括保护缓冲区、数组或其它数据结构的起始地址以及同步多线程环境中的数据操作。这种写法有助于确保在程序中始终访问相同的内存位置,避免意外地改变指针的指向。文章来源地址https://www.toymoban.com/news/detail-609328.html

到了这里,关于C++ 常量指针和指针常量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C/C++】 常量指针,指针常量、指向常量的常指针详解

    指针就是指向变量在内存中的地址 数据是存放在内存中的,每一个变量都有一个内存地址,假设是一个int类型变量 a ,占4个字节的内存区,那么在内存中如果是小端方式存储,我们创建指针p,把a的地址赋值给 p ,就是把a的首地址0x1100赋值给指针 p ,这个时候p的值就是变量

    2024年02月13日
    浏览(32)
  • 指针变量、指针常量与常量指针的区别

    定义 :指针变量是指存放地址的变量,其值是地址。 一般格式 :基类型 指针变量名;(int p) 关键点 : 1、int * 表示一种指针类型(此处指int 类型),p(变量名)即为定义的指针变量名。 2、在定义指针变量时必须指定基本类型,知道数据类型,才能按存储单元的长度以及数据的

    2024年02月11日
    浏览(38)
  • 一、21.指针类型转换 | 指针的指针 | 指针与常量

    01.指针类型转换

    2024年02月06日
    浏览(30)
  • C语言和C++中的空指针区别

    C语言中,空指针是 NULL ,是一个宏 在C++中 NULL 似乎也可以用,但是C++中的 NULL 其实是有问题的。C++大佬在设计的时候可能没有考虑全面 在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量 但是编译器默认情况下 将其看成是一个整形常量,如果要将

    2024年01月25日
    浏览(41)
  • 【高级程序设计语言C++】异常与智能指针

    当我们编写程序时,可能会遇到各种错误和异常情况,例如除以零、访问无效的内存地址等。为了能够处理这些异常情况,C++提供了异常处理机制。 异常是程序在运行时发生的意外或错误情况。当异常发生时,程序会中断当前的执行流程,并跳转到异常处理代码块。异常处理

    2024年02月10日
    浏览(33)
  • 【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

    之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义 已存在变量 a 的引用 b ; 这里的 引用 b 就是 普通引用 ; 普通引用代码示例 : 执行结果 : 与 变量引用 相对的就是 常量引用 ; 通过 普

    2024年02月11日
    浏览(26)
  • 【C++】C++ 引用详解 ⑨ ( 常量引用初始化 | C / C++ 常量分配内存的四种情况 )

    使用 \\\" 普通变量 \\\" 初始化 \\\" 常量引用 \\\" , 就是将 普通变量 赋值给 常量应用 , 也可以理解为 将 变量转为常量 ; 下面的代码 , 就是上述 使用 普通变量 初始化 常量引用 : 在 博客 【C++】C 语言 和 C++ 语言中 const 分析 ( const 左数右指原则 | C 语言中常量的原理和缺陷

    2024年02月10日
    浏览(34)
  • c++类开发的第三篇(讲明白友元函数和this指针)

    c++实现了 封装 , 数据 和 处理数据的操作(函数) 是分开存储的。 c++中的 非静态数据成员 直接内含在类对象中,就像c语言的struct一样。 成员函数并不会出现在对象中,而是作为类的一部分存储在代码段中,需要通过对象或对象指针进行调用。成员函数可以访问类的所有成员

    2024年02月21日
    浏览(35)
  • C语言常量(整型、实型、字符型、字符串、符号常量)

    对于C语言常量,该文章有详讲,由于文章太长,可参考如下思维导图和目录,可通过目录选择自己所需要的内容阅读。 整型常量即整数,包括正整数、负整数和零。C语言中,整型常量可以用十进制、八进制、和十六进制表示。 十进制表示: 由数字0-9,正、负号组成,如3

    2024年02月07日
    浏览(32)
  • C++:常量

    使用const的好处是允许指定一种语义上的约束,即某种对象不能被修改,且由编译器具体实施这种约束。 const声明格式: const 类型名 对象名; 修饰普通变量,时期不能被随意修改 【注意】1.C++中的const为内部连接,即由const定义的常量仅在被定义的文件中才能看见,除非使用

    2024年02月02日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包