下面的代码片段(正确)给出C中的警告和C++中的错误(分别使用GCC和G+ +,用3.4.5和4.2.1版本进行测试;MSVC似乎不关心):

char **a;
const char** b = a;

我能理解并接受这一点

char **a;
const char* const* b = a;

但是,在纯C中,校正后的版本(使用const char*const*)仍然会给出警告,我不明白为什么. 有没有办法在不使用石膏的情况下绕过这个问题?

澄清:

void f(const char* const* in) {
  // Only reads the data from in, does not write to it
}

我想在char**上调用它,那么该参数的正确类型是什么?

推荐答案

几年前我也遇到过同样的问题,这让我非常恼火.

C中的规则更简单(也就是说,它们没有列出将char**转换为const char*const*这样的例外情况).因此,这是不允许的.使用C++标准,它们包含了更多的规则来允许这样的情况.

最后,这只是C标准中的一个问题.我希望下一个标准(或技术报告)将解决这个问题.

C++相关问答推荐

如何在C中通过转换为char * 来访问float的字节表示?

CC crate 示例不会与C函数链接

想了解 struct 指针和空指针转换

C中空终止符后面的数字?

球体—立方体重叠:无、部分或全部?

C:fopen是如何实现二进制模式和文本模式的?

正确的TCP/IP数据包 struct

对于C中给定数组中的每个查询,如何正确编码以输出给定索引范围(1到N)中所有数字的总和?

用C语言计算文本文件中的整数个数

如何编写一个for循环来计算C中各项的总和?

为什么数组的最后一个元素丢失了?

I2C外设在单次交易后出现故障

如何使用libgpio(d)为Raspberry Pi编译C程序?

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

从不兼容的指针类型返回&&警告,但我看不出原因

C++中PUTS函数的返回值

用C++初始化局部数组变量

模仿 memmove 的行为

如何正确探测平台设备?

C 中 struct 体自赋值是否安全?特别是如果一侧是指向 struct 的指针?