从兼容的指针类型传递`富”的ARG 1(passing arg 1 of `foo' fro

2019-09-03 02:35发布

为什么这说明警告:

#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指针

Answer 1:

见Ç常见问题列表

你可以为了去除警告投:

foo((const char **)argv);

但随着FAQ说:需要这样的投可能表明一个更深层次的问题,其投并没有真正解决。



Answer 2:

根据您的编译标志,你可以指定CP的内容,以中共当需要显式类型转换。



Answer 3:

在第一个版本,你有两种不同类型的指针之间的铸造不是简单地增加一个const指针。

  • char **是一个指向(指针char
  • const char **是一个指向(指向一个const char

正如你可以看到这些指针指向不同类型相似,更明显有问题的:

int *i;
double *d;
d = i;

在第二个例子中,你看到,你可以从一个指针转换为一个常量指针,所以如果你是这适用于你的情况,你需要有一个const指针(指向一个char )。

foo(char * const *p);


文章来源: passing arg 1 of `foo' from incompatible pointer type
标签: c gcc ansi