【问题标题】:Type qualifiers (const) and complex declarations类型限定符 (const) 和复杂声明
【发布时间】:2014-01-08 15:24:05
【问题描述】:

假设我们有这样的声明:

int **const*** k;

然后,它可以很好地按字面意思(根据 cdecl.org)翻译成

将 k 声明为指向指针的指针 指向 const 的指针 到int

但是,我仍然不确定它不允许什么?它限制了哪些操作?我们还能做吗

(***k)++

也就是说,在里面加const有什么效果?

还有...同样的问题

int *const**const* k;

会有什么不同?

谢谢!

【问题讨论】:

  • 问个问题就好,但现实生活中不要做怪事,大家会讨厌你的。
  • 有人引用过一句话:“C 语法对于教授琐事的老师和喜欢取笑该语言的人来说是一个福音,但实际上并不是问题”。
  • 我在等人评论!实际上,我正在制作一种 C 解释器。因此,即使是最不寻常的类型,我也必须能够准确地复制!否则,我什至都懒得问了。

标签: c pointers constants variable-declaration


【解决方案1】:

仍然,我不确定它不允许什么?

不允许***k 指向的修改。

我们还可以吗

(***k)++   

否。你不能。这是因为***K 是一个指向指向const 指针的指针,你不能修改它。但是是的,对K、*k、**k 的修改是有效的。

为方便起见,可以这样理解:

int *const k;     // k is a const pointer to integer. No modification to k.  
int *const *k;    // *k is a const pointer to integer. No modification to *k.  
int *const **k;   // **k is a const pointer to integer. No modification to **k.  
int *const ***k;  // ***k is a const pointer to integer. No modification to ***k.  
int **const ***k; // ***k is a const pointer to integer. No modification to ***k.

【讨论】:

  • 不是const 保护int **吗?
  • 没有。在这些情况下,它们不是。
  • 现在很清楚了.. 两年没有 C++ 很难.. 现在我正在刷新我的知识,+1 很好的解释我的朋友。
  • 你还记得吗?有一次你告诉我学习指针,我回复你说“我有点害怕指针这个东西”:)
  • 好吧,肯定选择了答案:)
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多