将指针数组作为const传递

时间:2012-11-21 18:51:44

标签: c++ pointers const

作为常量传递的数组与作为常量的数组值之间有什么区别?

当每个值都是常量时,将一个指针数组传递给函数:

`void display(Fraction* const ar[], int size);`

一切正常但数组是常数

`void display(const  Fraction* ar[], int size);` 

编译器在调用函数时出现以下错误:

`error C2664: 'display' : cannot convert parameter 1 from 'Fraction *[3]' to 'const Fraction *[]'`

主:

int main()
{
    Fraction* fArray[3];
    Fraction* fOne = new Fraction();
    Fraction* fTwo = new Fraction();
    Fraction* fThree = new Fraction();
    fOne->num = 8;
    fOne->den = 9;
    fTwo->num = 3;
    fTwo->den = 2;
    fThree->num = 1;
    fThree->den = 3;
    fArray[0] = fOne;
    fArray[1] = fTwo;
    fArray[2] = fThree;
    display(fArray, 3);

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:3)

这是FAQ

请注意,const T* a[]表示T const* a[],即您声明为const的数组本身不是;相反,你已经声明了一个指向const项目的指针数组。

基本上,如果语言提供了隐式转换T**T const**,那么您可能会无意中尝试更改最初声明为const的内容:

int const     v = 666;
int*          p;
int**         pp = &p;
int const**   ppHack = pp;    //! Happily not allowed!

*ppHack = &v;    // Now p points to the const v...