c中“const char ** p”的含义

时间:2013-04-10 12:20:52

标签: c const

如果我今后首先为10个字符指针分配内存,然后为每个指向的字符指针分配内存,则p应该使10个字符指针为只读或是否应该使其成为字符串本身是只读的吗?

谢谢和问候。

3 个答案:

答案 0 :(得分:2)

const char **p声明指向const char的指针。

cdecl> declare p as pointer to pointer to const char  
const char **p

因此,修改字符p[i][j]不正确,而修改指针p[i]是正确的。

  

C11(n1570),§6.3.2.1左值,数组和函数指示符

     

可修改的左值是左值,它没有数组类型,没有不完整的类型,没有const限定类型,如果它是结构或联合,则不任何成员(包括,递归地,所有包含的聚合或联合的任何成员或元素)与const-   合格的类型。

并且,要使用=++等运算符,操作数必须是可修改的左值。

此外,这样的代码:

char **q = (char **)p;
q[i][j] = c;

导致未定义的行为:

  

C11(n1570),§6.7.3类型限定符

     

如果尝试修改用a定义的对象   通过使用具有非const限定的左值的const限定类型   类型,行为未定义。

答案 1 :(得分:0)

const绑定到char,这意味着你有10个指向字符串的指针,这些字符串的字符无法修改(无论如何都要通过这些指针!)。

答案 2 :(得分:0)

在这种情况下,p是指向const char的指针。也许更简单的写作方式是

 char const **p

(此代码等同于您所写的内容)。如果你从右到左阅读,你会看到p代表什么。

在这种情况下,无法使用* p修改指向的char。但是,您可以更改p或* p指向的内容。