C++中指向对象的常指针与指向常对象的指针详解

C++中指向对象的常指针与指向常对象的指针详解

1. 常指针(const pointer)

常指针是指指针所指向的内存地址不可修改,但是可以通过指针来修改对象的值。在C++中,使用关键字const来声明一个常指针。

示例代码1:

int main() {
    int x = 10;
    const int* ptr = &x;

    // 修改指针指向对象的值是非法的,编译器会报错
    *ptr = 20;  // Error: assignment of read-only location '* ptr'

    // 修改指针本身的值是合法的
    ptr = nullptr;

    return 0;
}

在上述示例中,我们声明了一个常指针ptr,它指向一个const int类型的对象x。由于ptr是常指针,所以不能通过*ptr来修改x的值,但是可以将ptr指向其他内存地址。

示例代码2:

int main() {
    int x = 10;
    int y = 20;
    const int* ptr = &x;

    // 修改指针指向对象的值是非法的,编译器会报错
    *ptr = 30;  // Error: assignment of read-only location '* ptr'

    // 修改指针本身的值是合法的
    ptr = &y;

    return 0;
}

在上述示例中,我们尝试修改ptr指向对象的值,但是编译器报错。然后,我们将ptr指向了另一个对象y,这是合法的。

2. 指向常对象的指针(pointer to const object)

指向常对象的指针是指指针所指向的对象不可修改,但是可以通过其他方式来修改指针指向的对象的值。在C++中,使用关键字const来声明一个指向常对象的指针。

示例代码1:

int main() {
    const int x = 10;
    int* const ptr = &x;

    // 修改指针指向对象的值是非法的,编译器会报错
    *ptr = 20;  // Error: assignment of read-only variable 'x'

    // 修改指针本身的值是非法的,编译器会报错
    ptr = nullptr;  // Error: assignment of read-only variable 'ptr'

    return 0;
}

在上述示例中,我们声明了一个指向常对象的指针ptr,它指向一个const int类型的对象x。由于ptr是指向常对象的指针,所以不能通过*ptr来修改x的值,同时也不能修改ptr自身的值。

示例代码2:

int main() {
    const int x = 10;
    int y = 20;
    int* const ptr = &x;

    // 修改指针指向对象的值是非法的,编译器会报错
    *ptr = 30;  // Error: assignment of read-only variable 'x'

    // 修改指针本身的值是非法的,编译器会报错
    ptr = &y;  // Error: assignment of read-only variable 'ptr'

    return 0;
}

在上述示例中,我们尝试修改ptr指向对象的值和修改ptr本身的值,但是编译器都会报错。

请注意在以上示例中,由于x是常对象,它的值不能被修改,因此尝试通过指针来修改其值或者通过指针将其地址赋值给其他变量都是非法的。

希望以上内容能够对你理解C++中指向对象的常指针与指向常对象的指针有所帮助。如有疑问,请随时提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中指向对象的常指针与指向常对象的指针详解 - Python技术站

(0)
上一篇 2023年6月28日
下一篇 2023年6月28日

相关文章

  • js弹出窗口代码大全(详细整理)

    js弹出窗口代码大全(详细整理) JavaScript弹出窗口经常被用于在页面中显示重要信息或提供用户交互。本文将详细介绍JS弹出窗口的各种用法和代码示例。 alert弹窗 alert弹窗是JS中最常见的弹窗形式,它用于在页面中显示一段提示信息,用户需要点击确认按钮才能继续操作。 alert("这是一个alert弹窗!"); confir…

    其他 2023年3月28日
    00
  • Maven项目中读取src/main/resources目录下的配置文件的方法

    作为Maven项目的一部分,我们通常将一些配置文件放在src/main/resources目录下,例如application.properties、log4j.properties等,这些配置文件需要在项目中加载和使用。下面是在Maven项目中读取这些配置文件的方法完整攻略: 1. 从classpath读取配置文件 我们可以借助ClassLoader以及Re…

    other 2023年6月25日
    00
  • JavaScript进阶(一)变量声明提升实例分析

    JavaScript进阶(一)变量声明提升实例分析 在JavaScript中,变量声明提升是一种特性,它允许在变量声明之前就可以使用这些变量。这意味着,无论变量声明在代码的哪个位置,它们都会被提升到作用域的顶部。 1. 变量声明提升的基本概念 变量声明提升是JavaScript引擎在代码执行之前将变量声明移动到作用域顶部的过程。这意味着,无论变量声明在代码的…

    other 2023年8月8日
    00
  • vim recording

    Vim Recording Vim是一种功能强大的文本编辑器,它为用户提供了许多方便快捷的编辑方式,并且可以使用插件扩展其功能。在Vim中,记录宏是一项非常有用的功能。它可以让用户记录一系列命令,然后将它们应用到文件的其他部分。在这篇文章中,我们将介绍Vim中的录制宏功能。 如何录制宏 您可以通过以下步骤来录制宏: 打开Vim并进入“正常”模式 按下q键,然…

    其他 2023年3月28日
    00
  • 详谈PHP中public,private,protected,abstract等关键字的用法

    当谈到PHP中的关键字时,public、private、protected和abstract肯定是不可忽略的。在下面的攻略中,我将详细讲解这些关键字的用法,并为您提供两个示例,帮助您更好地理解它们的概念和用途。 public, private和protected public、private和protected是用于控制类的属性和方法可见性的关键字。 pub…

    other 2023年6月27日
    00
  • Java面向对象之类的继承介绍

    Java面向对象之类的继承介绍 一、概述 Java作为一门面向对象的编程语言,继承(Inheritance)是其面向对象编程的基石之一。继承是指在一个类的基础上,衍生出一个新的类,新的类继承了原有类的属性和方法。 二、继承的语法 Java中继承的语法如下: class ChildClass extends ParentClass { // 子类的其他属性和方…

    other 2023年6月26日
    00
  • iPhone7如何删除软件 苹果iPhone7手机删除软件图文教程

    iPhone7如何删除软件 – 苹果iPhone7手机删除软件图文教程 1. 通过主屏幕删除应用 在主屏幕上找到您想要删除的应用程序图标,轻轻按住它(不要松开手),直到图标开始摇晃或震动 点击应用程序图标上出现的”X”符号,确认是否要删除该应用程序 点击“删除”以删除应用,或者点击“取消”放弃删除 示例说明: 假设你要删除手机上的“Instagram”,首先…

    other 2023年6月25日
    00
  • 小米5s有哪些优缺点汇总 小米5s性价比怎么样

    以下是对小米5s的优缺点以及性价比的详细分析: 优点: 性能强大:小米5s搭载了高性能的骁龙821处理器和适当的内存配置,能够提供出色的性能表现。 摄影能力:小米5s配备了一颗1200万像素的索尼IMX378传感器,具有较高的拍照质量和细节表现能力。 指纹识别:小米5s采用了前置指纹识别技术,能够快速准确地解锁手机,并支持指纹支付等功能。 设计精美:小米5s…

    other 2023年10月17日
    00
合作推广
合作推广
分享本页
返回顶部