在C专家编程这本书中的1.9节看到下面这段代码
#include <stdio.h>
int foo(const char **p)
{
return 0;
}
int main(int argc, char **argv)
{
const char **p = argv;
foo(p);
return 0;
}
如果编译这段代码,编译器会发出一条警告信息:
test.c: In function ‘main’:
test.c:10:19: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
const char **p = argv;
不知道为什么会发出警告,因为在个人的认认知里非const的值应该是可以赋值给const的,由此去限定一种修改变量的途径。就如书中所说,下面这种情况是合法的,编译器不会告警
char *cp;
const char *ccp;
ccp = cp;
书中提到了ANSI C标准中的几句话
在ANSI C标准第6.3.2.2节中讲述约束条件的小节中有这么一句话