0

为什么这会显示警告:

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

4

3 回答 3

1

请参阅C 常见问题解答列表

您可以强制转换以删除警告:

foo((const char **)argv);

但正如常见问题解答所说:对这种演员表的需求可能表明演员表并没有真正解决的更深层次的问题。

于 2013-05-14T12:19:53.013 回答
0

根据您的编译标志,在将 cp 的内容分配给 ccp 时,您可能需要显式转换。

于 2013-05-14T12:06:03.320 回答
0

在第一个版本中,您在两种不同类型的指针之间进行转换,而不是简单地将 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);
于 2013-05-14T12:15:53.430 回答