首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针到常量和常量指针

指针到常量和常量指针
EN

Stack Overflow用户
提问于 2020-07-02 20:21:25
回答 3查看 70关注 0票数 0

在一本书中写道,我们不能将指针引用的内存更改为const,如:

代码语言:javascript
复制
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的指针,但更改了它的内存位置,它得到了运行,但它应该会给出错误->

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2020-07-02 20:25:39

再次阅读代码中的注释:

const int* pA = &a;//指向常量的指针。不能通过此操作更改a

它并不是说指针不能改变。它是指向的对象,不能更改(通过指针)。apA指向的对象。

我声明了指向常量的指针,但更改了它的内存位置,它运行了,但它应该会出现错误

它不应该“放弃”错误。你可以改变一个“常量指针”,也就是你可以让它指向另一个对象。你不能改变的是常量指针。但是你的指针不是const。

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 20:32:52

首先,让我们来了解一下

代码语言:javascript
复制
const int *p;

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

代码语言:javascript
复制
int* const p;

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

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 20:41:29

如果您期望您的代码会出现错误,请将prt声明更改为-

代码语言:javascript
复制
int* const ptr;

请参考此链接,它将帮助您了解更多详细信息Clockwise/Spiral Rule

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62696213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档