首页 > 解决方案 > 指向常量和常量指针的指针

问题描述

在一本书中写道,我们无法更改指向 const 的指针所引用的内存,例如:-

int a = 0, b = 2;

const int* pA = &a; // pointer-to-const. `a` can't be changed through this

int* const pB = &a; // const pointer. `a` can be changed, but this pointer can't.

const int* const pC = &a; // const pointer-to-const.

//Error: Cannot assign to a const reference

*pA = b;

pA = &b;

*pB = b;

然后我写了一个代码来检查这个,在那里我声明了指向 const 的指针,但改变了它的内存位置,它运行了,但它应该给出错误 - >

#include <iostream>
int main()
{
    int a=12;
    const int* ptr;
    ptr = &a;
    std::cout<<*ptr<<"\n";
    std::cout<<ptr<<"\n";
    std::cout<<*ptr<<"\n";
    int b=20;
    ptr=&b;
    std::cout<<*ptr;
    return 0;
}

标签: c++pointersconstants

解决方案


首先我们来了解一下是什么意思

const int *p;

上面这行意味着 p 是一个指向 const 整数的指针。这意味着 p 保存的是“const int”类型的变量的地址。这仅仅意味着您可以更改指针“p”的值。但是不能更改地址“p”所在的变量,因为它是 const int 类型。现在,如果你这样做

int* const p;

这意味着现在的指针是 const 类型并且保存着一个整数变量的地址。所以,这里的指针不能改变,但它指向的变量的值可以。


推荐阅读