我知道 :

const char* foo = "ab"; // OK.There is a "array to pointer" decay
const char a[3] = "ab"; // OK.
const char a[2] = "ab"; // Error. "ab" is const char [3]


那么,为什么在使用const char a[N]const char *作为函数参数时也不区分它呢?

函数声明void foo(const char *a)void foo(const char a[3])被认为是相同的。当我呼叫const char a[2] = "ab";时,没有像foo("abcdefg");这样的限制。不一致(不对称)的行为使我在开始的第一刻就有点好奇。

最佳答案

cppreference上我们可以找到


  参数列表中每个功能参数的类型根据以下规则确定:
  ...
  2)如果类型是“ T的数组”或“ T的未知范围的数组”,则将其替换为“ T的指针”类型


至于为什么,我相信它像许多其他语言功能一样被C语言简单地采用了。

07-27 13:20
查看更多