我知道 :
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语言简单地采用了。