我知道 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/