char * const * p和char ** const p之间的区别

时间:2013-06-26 08:25:27

标签: c pointers

在接受采访时被问到。 就像从右到左阅读的想法一样,我可以解释

char *const *p declares p as pointer to constant pointer of character.

,而

char * *const p declares p as a constant pointer to character pointer. 

但由于我没有得到这些的确切含义所以请验证它。

3 个答案:

答案 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 = *qq = p。所以看起来你是对的。 *p是常量,q是常量。

(是的,我知道我的程序有未定义的行为,因为我取消引用未初始化的指针。这不是,呵呵。)