为什么这说明警告:
#include<stdio.h>
foo (const char **p)
{
}
int main(int argc , char **argv)
{
foo(argv);
}
但是,下列情况不显示任何警告
char * cp;
const char *ccp;
ccp = cp;
第一代码片断显示警告合格ARG 1 foo
从兼容的指针类型。 但是,第二个片段不显示任何警告。 两者都是const
指针
为什么这说明警告:
#include<stdio.h>
foo (const char **p)
{
}
int main(int argc , char **argv)
{
foo(argv);
}
但是,下列情况不显示任何警告
char * cp;
const char *ccp;
ccp = cp;
第一代码片断显示警告合格ARG 1 foo
从兼容的指针类型。 但是,第二个片段不显示任何警告。 两者都是const
指针
见Ç常见问题列表
你可以为了去除警告投:
foo((const char **)argv);
但随着FAQ说:需要这样的投可能表明一个更深层次的问题,其投并没有真正解决。
根据您的编译标志,你可以指定CP的内容,以中共当需要显式类型转换。
在第一个版本,你有两种不同类型的指针之间的铸造不是简单地增加一个const
指针。
char **
是一个指向(指针char
) const char **
是一个指向(指向一个const char
) 正如你可以看到这些指针指向不同类型相似,更明显有问题的:
int *i;
double *d;
d = i;
在第二个例子中,你看到,你可以从一个指针转换为一个常量指针,所以如果你是这适用于你的情况,你需要有一个const指针(指向一个char
)。
foo(char * const *p);