【发布时间】:2017-12-02 22:14:55
【问题描述】:
假设
int a = 1;
int b = 2;
int c = 3;
int * A[3] = {&a, &b, &c};
我想知道为什么允许这样做:
void arrFunc1(int * const * arg)
{
}
而这个不是:
void arrFunc2(int const ** arg)
{
}
在一个:
int main(void)
{
arrFunc1(A); // OK
arrFunc2(A); // Not OK
return 0;
}
我知道这两者之间的区别。第一个函数将假定指针本身是常量并且不能更改,第二个函数假定这些指针指向的整数不能更改。但我想知道为什么不允许第二个功能?我看不出有什么理由可以破坏任何东西。
【问题讨论】:
-
好的,我在提议的“重复问题”中找到了答案。解释here谢谢大家
-
基本上,您可以将
T转换(分配)为const T,并将T *转换为const T *,但到此为止,不能再进一步将T **转换为@ 987654331@,原因在上面的链接中说明。
标签: c arrays pointers constants