如果我今后首先为10个字符指针分配内存,然后为每个指向的字符指针分配内存,则p应该使10个字符指针为只读或是否应该使其成为字符串本身是只读的吗?
谢谢和问候。
答案 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指向的内容。