为什么会显示警告:
#include<stdio.h>
foo (const char **p)
{
}
int main(int argc , char **argv)
{
foo(argv);
}
但是以下没有显示任何警告
char * cp;
const char *ccp;
ccp = cp;
第一个代码段显示警告从不兼容的指针类型传递foo
的arg 1。但第二个片段没有显示任何警告。两者都是const
指针
答案 0 :(得分:1)
答案 1 :(得分:0)
根据您的编译标志,在将cp的内容分配给ccp时可能需要显式强制转换。
答案 2 :(得分:0)
在第一个版本中,您在两种不同类型的指针之间进行投射,而不是简单地向指针添加const
。
char **
是指向(char
)const char **
是指向(const char
)正如你可以看到这些指针指向不同类型的类似于更明显可疑的类型:
int *i;
double *d;
d = i;
在你的第二个例子中,你看到你可以从指针转换为const指针,所以如果要将它应用于你的情况,你需要有一个const指针(指向char
的指针)
foo(char * const *p);