假设
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)
{
}
在a:
int main(void)
{
arrFunc1(A); // OK
arrFunc2(A); // Not OK
return 0;
}
我知道这两者之间的区别。第一个函数将假设指针本身是常量而不能更改,第二个函数假定这些指针所指向的整数不能更改。但我想知道为什么不允许第二个功能?我看不出有什么理由会破坏任何东西。
答案 0 :(得分:0)
因为使用int const ** arg
,您说arg
是指向const int
的指针,但是a
,b
和c
不是const int
变量。
使用int * const * arg
,您说arg
是指向int
的常量指针的指针。即你不能改变什么,例如arg[0]
指向。