const int*、const int * const 和 int const * 的区别

yizhihongxing

const int、const int const 和 int const* 的区别

c++中,指针前面的const关键字总是会导致困惑。本文将对 const int*const int* constint const* 之间的区别进行讲解。

首先,我们需要知道,* 是一个“附加符号”,它决定了符号左边的标识符是一个指针而非其他类型的变量。指针可以看做是存储内存地址的变量,而 const 则是“常量”的意思,表示变量的值不可更改。

const int*

const int* 表示指向一个 const int 类型对象的指针。即指针指向的对象不能够被修改,但是指针本身是可以被修改的。

void example1() {
    const int data = 0;
    const int* ptr = &data;
    *ptr = 1; // 编译错误
    ptr = nullptr; // 可以修改指针本身
}

const int* const

const int* const 表示一个指向 const int 类型对象的 const 指针。即指针指向的对象和指针本身都不可被修改。

void example2() {
    const int data = 0;
    const int* const ptr = &data;
    *ptr = 1; // 编译错误
    ptr = nullptr; // 编译错误
}

int const*

int const* 也表示指向一个 const int 类型对象的指针。但是,和 const int* 不同的是,int const* 中的 const 出现在了类型的前面,这是等效的写法。

void example3() {
    const int data = 0;
    int const* ptr = &data;
    *ptr = 1; //编译错误
    ptr = nullptr; //可以修改指针本身
}

总结

以上面三个示例为例,总结一下 const int*const int* constint const* 的区别:

  1. const int* 表示指针指向的对象为 const int ,可以修改指针本身;
  2. const int* const 表示指针指向的对象和指针本身都为 const,不可以修改指针本身;
  3. int const* 也表示指针指向的对象为 const int,可以修改指针本身,但是在语法上等价于 const int*

在实际编码中,可以根据需要选择使用不同的指针类型,以保证程序的正确性和安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:const int*、const int * const 和 int const * 的区别 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • Java 细致图解带你分析汉诺塔

    Java 细致图解带你分析汉诺塔攻略 背景介绍 汉诺塔(Tower of Hanoi)是一款经典的数学智力游戏,由法国数学家 Edouard Lucas 于1883年发明。汉诺塔游戏的目标是将发牌版上的64个不同大小的圆盘全部移动到游戏柱子上另一个没有其他盘子的柱子上,要求每次只能移动一个盘子,并且大盘子不能放置在小盘子上面。汉诺塔问题是一个非常典型的递归问…

    C 2023年5月22日
    00
  • C语言 将数组传递给函数

    将数组传递给函数在C语言中是一种常见的操作,这种操作可以让我们更加方便地管理和操作数组数据。下面详细讲解如何将数组传递给函数。 函数原型 在C语言中,我们在函数中使用数组参数时,必须在函数原型中声明该参数的类型和名称,例如: void function_name(int array[], int size); 这里,array[]表示该参数是一个数组,int…

    C 2023年5月9日
    00
  • Gin框架之参数绑定的实现

    Gin框架之参数绑定的实现 1. 参数绑定 在Gin框架中,我们可以通过Context结构体中的方法Bind方法来进行参数绑定。Bind方法提供的参数绑定能力非常强大,支持多种类型的参数绑定,例如querystring参数、form参数、json格式参数、xml格式参数等。 2. 示例 2.1 绑定querystring参数 package main imp…

    C 2023年5月23日
    00
  • C/C++实现通讯录管理系统(附源码)

    C/C++实现通讯录管理系统(附源码)攻略 简介 该项目是使用C/C++语言编写的通讯录管理系统。该系统实现了通讯录的增、删、改、查等功能,可以方便地管理用户的通讯录信息。本文将从环境配置、源码分析、运行流程等方面详细讲解该项目的实现过程。 环境配置 该项目是使用C/C++语言编写的,需要在本地安装相应的编译环境。推荐使用Visual Studio Code…

    C 2023年5月23日
    00
  • c语言swap(a,b)值交换的4种实现方法

    下面是关于“c语言swap(a,b)值交换的4种实现方法”的完整攻略: 1.方法一:使用中间变量 这是最常见的一种方法,使用一个中间变量来存储一个变量的值,然后再将该变量的值赋给另一个变量。具体实现可以参考下面的代码: void swap(int *a, int *b) { int temp = *a; // 存储a的值 *a = *b; // 将b的值赋给…

    C 2023年5月23日
    00
  • 详解C++句柄类

    详解C++句柄类 在C++中,句柄类是一种将资源管理委托给类实例的方法,以确保正确地释放使用的资源。本篇文章将详细讲解什么是C++句柄类,并展示了如何创建和使用句柄类。 什么是句柄类? 句柄类是一种 C++ 类,主要用于管理资源,通过封装对资源的访问来确保资源有效使用。句柄类通常用于管理底层的操作系统资源,例如文件、网络套接字、设备上下文、数据库连接等。在释…

    C 2023年5月22日
    00
  • c++ 面向对象的类设计

    C++ 面向对象的类设计攻略 什么是面向对象的类设计 面向对象的类设计是指基于面向对象编程思想来设计类的过程。面向对象编程思想是一种编程范式,其中的对象是一个实例或者说是类的一个实例化对象,这些对象通过类之间的消息传递进行通信,从而共同完成一个复杂的任务。 在C++编程中,面向对象的类设计尤为重要,因为它是C++中的重要组成部分。经典的面向对象编程思想是将数…

    C 2023年5月22日
    00
  • Java如何自定义异常打印非堆栈信息详解

    如何自定义异常打印非堆栈信息 在Java程序中,当代码抛出异常时,异常信息中除了常见的堆栈信息(stack trace)外,还可以自定义异常信息和错误代码等非堆栈信息。这种自定义异常信息可以更加清晰地描述异常情况,便于程序员快速定位和排查问题。下面是一种标准的Java自定义异常的方式,结合代码实例进行说明。 自定义异常示例 在Java中,我们可以通过继承Ex…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部