为什么这会显示警告:
#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
指针
根据您的编译标志,在将 cp 的内容分配给 ccp 时,您可能需要显式转换。
在第一个版本中,您在两种不同类型的指针之间进行转换,而不是简单地将 a 添加const
到指针中。
char **
是指向 a 的指针(指向 a 的指针char
)const char **
是指向 a 的指针(指向 a 的指针const char
)正如你所看到的,这些指针指向不同的类型,类似于更明显有问题的:
int *i;
double *d;
d = i;
在您的第二个示例中,您看到您可以将指针转换为 const 指针,因此如果您要将其应用于您的情况,您将需要一个指向(指向 a 的指针char
)的 const 指针。
foo(char * const *p);