在接受采访时被问到。 就像从右到左阅读的想法一样,我可以解释
char *const *p declares p as pointer to constant pointer of character.
,而
char * *const p declares p as a constant pointer to character pointer.
但由于我没有得到这些的确切含义所以请验证它。
答案 0 :(得分:5)
char * const *p
表示p
指向的字符指针无法更改。
char arr[] = "";
char *ptr = arr;
char * const *p = &ptr;
**p = '\0'; // ok
*p = 0; // error
p = 0; // ok
char ** const p
表示p
无法更改。
char arr[] = "";
char *ptr = arr;
char ** const p = &ptr;
**p = '\0'; // ok
p = 0; // error
*p = 0; // ok, ptr is now NULL
答案 1 :(得分:3)
在C中声明复杂指针时,我常常在屏幕上碰到头,直到我发现cdecl :)
char *const *p // -> declare p as pointer to const pointer to char
char * *const p // -> declare p as const pointer to pointer to char
您也可以安装它。
干杯!
答案 2 :(得分:0)
我使用以下代码对此进行了测试:
main()
{
char *const *p;
char **const q;
**p = 'a';
*p = *q;
p = q;
**q = 'a';
*q = *p;
q = p;
}
海湾合作委员会对我说第7和第12行,即*p = *q
和q = p
。所以看起来你是对的。 *p
是常量,q
是常量。
(是的,我知道我的程序有未定义的行为,因为我取消引用未初始化的指针。这不是点,呵呵。)