c - 为什么我在尝试将 'char (*c)[6]' 传递给需要 'const char (*c)[6]' 的函数时收到警告?

标签 c arrays pointers parameters constants

我知道 char **const char ** 的事情(如 c faq 中所述)但我看不到这样做的任何场景使用指向数组的指针会导致数组本身内部的某些内容被实际修改。

我的代码:

void fun(const char (*p)[6])
{
    printf("%s", p[0]);
}

int main(int argc, char *argv[])
{
    char a[6] = "hello";
    char (*c)[6];

    c = &a;

    fun(c);
}

使用 gcc 编译时给出以下输出:

test.c:17:9: warning: passing argument 1 of 'fun' from incompatible pointer type
test.c:5:10: note: expected 'const char (*)[6]' but argument is of type 'char (*)[6]'

问题here在某种程度上是相关的,但到目前为止还没有答案。是否只是编译器偏执,摆脱警告的唯一方法是显式转换?或者真的有可能出问题吗?

最佳答案

这只是 C 语言规范的一个怪癖。再举个例子,char **const char *const * 的转换从 const 正确性的角度来看也是安全的,但它在 C 中是被禁止的。

这种 const 正确性规则的怪癖在 C++ 语言中已“修复”,但 C 在这方面继续坚持其原始规范。

关于c - 为什么我在尝试将 'char (*c)[6]' 传递给需要 'const char (*c)[6]' 的函数时收到警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229763/

相关文章:

ffmpeg可以解码G711音频吗

c - 两次释放 glib 缓冲区是否安全?

c++ - 需要帮助为 Arduino 创建无限数组 (c/c++)

c - 在c中的链表中插入一个条目

使用函数更改指针包含的地址

c++ - 在线程之间重定向标准输入/输出

c - 打印 malloc 的指针总是给出相同的地址

java - 如何将txt文件中的数据复制到数组

java - 复制和修改数组元素

c++ - 如何在另一个QVector <QVector <T> *>中动态存储QVector <T>的地址?