Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型限定符(const)和复杂声明_C_Pointers_Constants_Variable Declaration - Fatal编程技术网

类型限定符(const)和复杂声明

类型限定符(const)和复杂声明,c,pointers,constants,variable-declaration,C,Pointers,Constants,Variable Declaration,假设我们有这样的声明: int **const*** k; 然后,它可以很好地从字面上(根据cdecl.org)翻译成 将k声明为指针指向指针指向常量指针指向指针 整型 然而,我仍然不知道它不允许什么?它限制哪些操作?我们还能做什么 (***k)++ 换句话说,在那里添加常量的效果是什么 而且。。。同样的问题 int *const**const* k; 这会有什么不同 谢谢 尽管如此,我还是不知道它不允许什么 它不允许***k指向的修改 我们还能做什么 (***k)++ 否。你不能。这是

假设我们有这样的声明:

int **const*** k;
然后,它可以很好地从字面上(根据cdecl.org)翻译成

将k声明为指针指向指针指向常量指针指向指针 整型

然而,我仍然不知道它不允许什么?它限制哪些操作?我们还能做什么

(***k)++
换句话说,在那里添加常量的效果是什么

而且。。。同样的问题

int *const**const* k;
这会有什么不同

谢谢

尽管如此,我还是不知道它不允许什么

它不允许
***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.
尽管如此,我还是不知道它不允许什么

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

问一个问题是好的,但不要在现实生活中做奇怪的事情,每个人都会恨你。这会有帮助:有人引用了一句话:“C语法对老师和喜欢开语言玩笑的人来说是一种恩惠,但实际上不是一个问题。”我在等别人评论!实际上,我正在做一种C语言的解释器。因此,我必须能够准确地复制即使是最不寻常的类型!除此之外,我甚至懒得问。这是一个好问题,但不要在现实生活中做奇怪的事情,每个人都会恨你。这会有所帮助:有人引用了一句话:“C语法对老师和喜欢取笑这种语言的人来说是一种恩惠,但实际上并不是一个问题。”我正在等待有人发表评论!实际上,我正在做一种C语言的解释器。因此,我必须能够准确地复制即使是最不寻常的类型!否则,我甚至不会费心去问。难道不是
const
保护
int**
?不。在这些情况下,它们不是。现在很清楚了。。两年没有C++是很难的。我现在正在刷新我的知识,+1很好的解释,我的朋友。你还记得吗?有一次你告诉我要学习指针,我回答说“我有点害怕指针的东西”:)好吧,选择的答案是肯定的:)不是
const
保护
int**
?不是。在这些情况下,它们不是。现在很清楚了。。两年没有C++是很难的。我现在正在刷新我的知识,+1很好的解释,我的朋友。你还记得吗?有一次你告诉我要学习指针,我回答说“我有点害怕指针的东西”:)好吧,选择答案是肯定的:)