两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。(from c专家编程)
1 foo(const char **p){} 2 3 main(int argc, char **argv){ 4 foo(argv); 5 }
如果编译此代码,将会产生警告——第五行,参数与原型不匹配。
首先,argv的类型为指向char类型指针的指针,p为指向由const修饰的char类型的指针,前者指向char *, 后者指向const char *。
显然二者不相容。
然而经过我的测试,只要左右所指类型不相同,便会发出警告。