实参char ** 和形参const char** 不相容
#include <stdio.h>
void foo(const char **p);
int main()
{
char ch[2][20] = { "Hello world", "Hi"};
char** p = (char**)ch;
foo(p);
return 0;
}
void foo(const char **p, int n)
{
}
Error 1 error C2664: 'foo' : cannot convert parameter 1 from 'char **' to 'const char **'
因为:原型:指向const char 的指针的指针
实参:指向char 的指针的指针
由于char ** 和 const char** 都是没有限定符的指针类型,即const 并不是修饰指针,所以前者指向char *,后者指向const char*,因此是不相容的。
但是char *和const char *是相容的,因为前者是指向没有限定符的char指针,后者指向的是有const 限定符的char的指针,而char 类型和char 类型是相容的。