C语言 从不兼容的指针类型传递参数1(foo)

2w2cym1i  于 2023-03-22  发布在  其他
关注(0)|答案(3)|浏览(132)

为什么显示警告:

#include<stdio.h>
foo (const char **p)
{ 

}

int main(int argc , char **argv)
{
    foo(argv);
}

但以下并没有显示任何警告

char * cp;
const char *ccp;
ccp = cp;

第一个代码片段显示了从不兼容的指针类型传递foo的arg1的警告。但第二个代码片段没有显示任何警告。两者都是const指针

rslzwgfq

rslzwgfq1#

参见C FAQ list
您可以强制转换以移除警告:

foo((const char **)argv);

正如FAQ所说:需要这样的转换可能表明转换并没有真正解决的更深层次的问题。

iaqfqrcu

iaqfqrcu2#

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

kzipqqlq

kzipqqlq3#

在第一个版本中,你是在两种不同类型的指针之间转换,而不是简单地向指针添加const

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

正如你所看到的,这些指针指向不同的类型,类似于更明显的问题:

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

在第二个示例中,您可以看到可以从指针强制转换为常量指针,因此如果要将此应用于您的情况,则需要将常量指针指向(指向char的指针)。

foo(char * const *p);

相关问题