【问题标题】:Pointer that can not be changed to a pointer that can not be written into? [closed]不能改成不能写入的指针? [关闭]
【发布时间】:2015-02-05 22:26:40
【问题描述】:

如何声明这样的指针?

我应该把这两个consts 放在哪里?

我认为这在 C 和 C++ 中是相同的。

【问题讨论】:

  • int const** const? (const指向const的指针)
  • 限定符总是适用于它们的剩余部分。除非他们在最左边。

标签: c++ c


【解决方案1】:

以下是const/non-const 的四种变体,涉及指针及其指向的对象:

int i1 = 10;
const int i2 = 20;
int i3 = 30;
const int i4 = 40;

int* p1 = &i1;              // You can change p1 and *p1
*p1 = 25;                   // OK
p1 = &i3;                   // OK

const int* p2 = &i2;        // You can change p2 but not *p2
*p2 = 25;                   // Not OK
p2 = &i4;                   // OK

int* const p3 = &i1;        // You can not change p3 but you can change *p3
*p3 = 25;                   // OK
p3 = &i3;                   // Not OK

const int* const p4 = &i2;  // You can change neither p4 nor *p4
*p4 = 25;                   // Not OK
p4 = &i4;                   // Not OK

【讨论】:

  • 问题是关于指针的指针。
  • @ouah,我没有得到那种印象,但我可能弄错了。
  • 题目是Pointer that can't be changed to a pointer that can't be write into?
【解决方案2】:

const int * const ptr 可以工作。

最左边的const 应用于int(指针),另一个const 应用于它的左边,*,也就是指针。

int main()
{
  int i = 42;
  int b = 0;
  const int *const ptr = &i;

  ptr = &b; // doesn't compile
  *ptr = 1; // dito
}

【讨论】:

  • 问题是关于指针的指针。
【解决方案3】:
typedef const int *pointer_that_cannot_be_written_through;
typedef pointer_that_cannot_be_written_through *const unwriteable_pointer;
int a;
pointer_that_cannot_be_written_through b = &a;
unwriteable_pointer p = &b, q = &b;
p = q;    // ERROR
*p = *q;  // FINE
**p = **q // ERROR

其实p的类型是const int **const

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多