我很困惑。我看到代码是这样的时候
然后就没有编译错误了。这两段代码有什么区别呢?为什么第二段代码可以将一个变量传递给带有常量参数的函数呢?
void fun(const char **p) { }
int main(int argc, char **argv)
{
fun(argv);
getchar();
return 0;
}
而且它显示了错误:从'char **'到'const char **'的无效转换
但是当代码像这样时
void test(const char *p) { }
int main()
{
char *c = new char('a');
test(c);
}
然后就没有编译错误了。这两段代码有什么区别呢?为什么第二段代码可以将一个变量传递给带有常量参数的函数呢?
void fun(const char *const *p)
是可行的,甚至void fun(char *const *p)
也是可行的。要对指向指针的指针进行这样的转换,如果在左边添加了const
,则还需要在其右边的所有位置上添加它。但是我不记得为什么规则是这样的。 - undefined