delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

04 Jun 2006

const char ** vs char * const * vs const char * const *

因为有人问到这个问题,解答一下:

对于:
const char **p
p[i]的值可变,而p[i][j]的值不可变。

对于
char * const *p
p[i]的值不可变,而p[i][j]的值可变。

对于
const char * const *p
p[i]的值不可变,p[i][j]的值也不可变。

由是可见,第三种对于接收参数的一方而言,是最为严厉的限制。在设计接口时,这类限制有助于减少程序中的潜在问题,但却会使使用现有接口的一些程序出现错误。许多公开的标准,特别是POSIX,往往会出于这种考虑而选择char * const *。在设计程序时,对于这种char * const*,应当作const char * const *看待,而不应abuse其p[i][j]可写的特性。