将指针数组作为参数传递给const

时间:2017-06-29 09:28:09

标签: c arrays pointers const

假设

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;
}

我知道这两者之间的区别。第一个函数将假设指针本身是常量而不能更改,第二个函数假定这些指针所指向的整数不能更改。但我想知道为什么不允许第二个功能?我看不出有什么理由会破坏任何东西。

1 个答案:

答案 0 :(得分:0)

因为使用int const ** arg,您说arg是指向const int的指针,但是abc不是const int变量。

使用int * const * arg,您说arg是指向int的常量指针的指针。即你不能改变什么,例如arg[0]指向。