键入限定符(const)和复杂声明

时间:2014-01-08 15:24:05

标签: c pointers const variable-declaration

说我们有这样的声明:

int **const*** k;

然后,它可以很好地翻译(根据cdecl.org)到

  

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

然而,我仍然不确定它不允许的是什么?哪个操作受到限制?我们还能做吗

(***k)++

换句话说,在那里添加const的效果是什么?

并且......同样的问题

int *const**const* k;

它会有什么不同?

谢谢!

1 个答案:

答案 0 :(得分:4)

  

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

它不允许***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.