【问题标题】:Assigning C++ pointers [duplicate]分配 C++ 指针 [重复]
【发布时间】:2021-04-03 08:35:36
【问题描述】:

我是 C++ 新手,刚开始学习指针。如果我写代码 -

    const int n = 4;
    int m = 4;
    const int *p = &n;

我非常了解 const 使变量不可更改。因此,如果我想更改 n,我不能,但是指针具有的不可更改的值是什么?因为下一个代码正在执行正确-

p = &m;

这不应该给出一个错误,因为它已经存储了 n 的值吗?如果这是一个愚蠢的问题,我很抱歉。

【问题讨论】:

  • const int *p = &n; 可以更改地址,但不能更改值。所以,*p = 8; 会给你错误。

标签: c++ pointers


【解决方案1】:
 const int *p = &n;

上面的指针不是不可改变的,它所指向的东西是不可改变的

 const int * const cp = &n;
 cp = &m;                     // error here

这个指针是不可更改的。要使指针不可更改,请将 const 放在 * 之后。

似乎关于指针最重要的一课(我看到初学者一直对此感到困惑)是指针,它指向的是两个不同的东西。在这种情况下,指针或其指向的对象可以是const(或两者都可以)。

【讨论】:

  • 另一个常见的误解是,如果您有一个const T *,则指向的对象不能更改,但通常这是错误的。真实的是,使用该指针无法更改,但由于别名仍然可以更改(可以通过其他方式访问该对象)。请参阅stackoverflow.com/a/4705871/320726 中的Rect 示例,了解这种误解可能造成的损害。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
相关资源
最近更新 更多