C++ const和指针详情

目录
  • 1、指针和const
    • 1.1 指向常量的指针
    • 1.2 const指针
    • 1.3 指针和内容都不可变

1、指针和const

我们知道const关键字修饰的是不可变量,将它和指针一起使用,会有很多微妙的地方。

关于使用const来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置。下面我们来看下细节。

1.1 指向常量的指针

首先是指向常量的指针,含义是指针的类型是一个常量类型。所以写成:

const int * p;

可以理解成p是一个指针,它的类型是const int,也就是常量类型。它既可以用来指向一个常量类型,也可以指向一个非常量类型,下方的这两种方式都是合法的:

int age = 23;
const int* p = &age;

const double price = 233;
const double* pt = &price;

但是反过来,将一个const类型的变量赋值给一个非const的指针是非法的:

const int age = 23;
int* p = &age; // 非法

如果非要这样做,可以使用const_cast运算符进行强制转换,这个我们会在之后的文章当中讨论。

另外还有一个很有意思的点,如果我们将一个非const类型的变量赋给了const类型的指针,虽然我们无法通过指针修改对应的值,

但是通过变量修改却是可以的:

int age = 23;
const int* p = &age;

*p = 233; // 非法
age = 233; // 合法

还有,我们无法修改指针指向的值,但是修改指针指向的位置是可以的:

int age = 23;
int price = 233;
const int* p = &age;
p = &price;

1.2 const指针

上面我们介绍了指向const的指针,还有另外一种指针叫做const指针。const指针指的是指针本身是const修饰的,我们无法修改指针指向的位置。

int age = 23;
int* const p = &age;

但是我们修改指针指向的值是可以的:

*p = 2333; // 合法

1.3 指针和内容都不可变

当然我们也可以将两种const叠加使用,让指针指向的对象以及对象的值都不可修改:

const int * const p = &age;

到此这篇关于C++ const和指针详情的文章就介绍到这了,更多相关C++ const和指针内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

文章转自公众号:Coder梁(ID:Coder_LT)

(0)

相关推荐

  • 详细分析c++ const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的.其定义形式如下: type *const 指针名称; 声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用.例如,下面都是合法的声明,但是含义大不同: const int * pOne;    //指向整形常量 的指针,它指向的值不能修改 int * cons

  • C++ const的使用及this指针常方法(面试最爱问的this指针)

    1. const的使用 const的使用有以下四种情况: const int* p int const *p int* const p const int* const p 我们可以通过以下图解来理解这四种情况const到底修饰的是谁: 当const在 " * " 的左边,则指向的值不能被修改 当const在 " * " 的右边,则自身不能被修改 2. this指针 2.1 前言(this指针的引出) 观察如下代码,我们会发现,Date类中有Display和SetD

  • 浅析C++的引用与const指针与各种传递方式

    浅析C++的引用与const指针与各种传递方式 首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量:而 int * const p 跟上面是不一样的,即 p 是常量:我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟  int * const p   的性质很像. 其实引用的底层就是用const指针来实现的.下面举个小例子: #include <iostream> us

  • C++ const和指针详情

    目录 1.指针和const 1.1 指向常量的指针 1.2 const指针 1.3 指针和内容都不可变 1.指针和const 我们知道const关键字修饰的是不可变量,将它和指针一起使用,会有很多微妙的地方. 关于使用const来修饰指针,有两种不同的方式.第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值.第二种则是将指针本身声明为常量,可以防止改变指针指向的位置.下面我们来看下细节. 1.1 指向常量的指针 首先是指向常量的指针,含义是指针的类型是一个常量类型.所以写成:

  • C++this指针详情

    还是Stock股票这个类,假设我们要实现一个方法,比较一下当前股票和传入的股票, 返回价格高的那个股票.在我们实现的时候,会遇到一点问题. const Stock & Stock::topVal(const Stock &s) const {     if (s.total_val > total_val) {         return s;     }else {         return ????;     } } 这段代码当中有一些问题,我们一个一个来说. 首先说函数签

  • C语言中const与指针使用方法总结

    C语言中const与指针使用方法总结 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长. 总结: * const 值不能改变,指向可改变 const * 值能改变,指向不可改变 const * const 都不能改变 实例代码: #include <stdio.h> int main(int argc, const char * argv[]) { // 1 可改

  • C语言关键字const和指针的结合使用

    我们先定义三个变量 1.const int *p1 2.int const *p2 3.int *const p3 p1.p2.p3这三个指针都是指向int类型的,那它们有什么区别呢 写个代码测试一下 编译一下 可看到第11,12,16行报错,从中可得出以下结论: const int * 与 int const *是一样的效果,指向的内存是不能改变的,即指针指向的内容是只读的,或者说是一个常量.不过指向的位置是可以更改的,即p1和p2可以重新指向别的常量. 而char *const 刚好相反,表

  • 深入了解C语言中的const和指针

    目录 前言 指针的赋值 问题 ANSI C 有关简单赋值的标准 问题解决 const修饰 const修饰变量 const修饰指针 前言 文章内容由阅读<C专家编程>整理而来.希望可以帮助大家解决在指针赋值和const方面的问题,也希望大家多多指正文章中的错误,共同进步. 指针的赋值 问题 将一个类型为 char** 的值赋值给一个 const char** 类型的对象是否合法呢? 先说结果,在vs的环境下,编译器不会报错也不会有任何警告. 但在linux环境下用gcc编译就会出现下面的警告:

  • C语言中const和指针的秘密你知道吗

    目录 指针的赋值 问题 ANSI C 有关简单赋值的标准 问题解决 char* 和 const char* char** 和 const char** const修饰 const修饰变量 const修饰指针 const int* p int* const p const int* const p 总结 指针的赋值 问题 将一个类型为 char** 的值赋值给一个 const char** 类型的对象是否合法呢? 先说结果,在vs的环境下,编译器不会报错也不会有任何警告. 但在linux环境下用g

  • C语言编程const遇上指针分析

    const关键字 可以有很多用处,比如: #define ROW 10 就代表ROW的值恒为10,不可修改. 而 const int ROW=10; 也可以将值恒定,无法修改.还有 const int num[10];//将数组整个保护,无法修改. 但,并不是将被保护量变为常量,而是在处理时将其看为常量,不能对其修改. 当const与指针结合 我们先来看看这个 const int num[] = { 1,2,3,4,5 }; int* p = num; num[0] = 10; *p = 10;

  • C语言中const,指针和引用的关系

    目录 const 与指针 const 与引用 const 与指针.引用 总结 const 与指针 我们写一段代码来探究以下 int a = 10, b = 20; int* p1 = &a; *p1 = 100; p1 = &b; const int* p2 = &a; int const* p3 = &a; int* const p4 = &a; const int* const p5 = &a; 在上面 const int* p2;与int const*

  • C语言指针详解及用法示例

    新手在C语言的学习过程中遇到的最头疼的知识点应该就是指针了,指针在C语言中有非常大的用处.下面我就带着问题来写下我对于指针的一些理解. 指针是什么? 指针本身是一个变量,它存储的是数据在内存中的地址而不是数据本身的值.它的定义如下: int a=10,*p; p=&a int a=10; int *p=&a; 首先我们可以理解 int* 这个是要定义一个指针p,然后因为这个指针存储的是地址所以要对a取地址(&)将值赋给指针p,也就是说这个指针p指向a. 很多新手都会对这两种定义方法

随机推荐