0

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

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

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

1 回答 1

3

这是一个常见问题解答

请注意,这const T* a[]意味着T const* a[],即您声明的不是数组本身constconst相反,您已经声明了一个指向项目的指针数组。

本质上,如果语言提供了隐式转换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...
于 2012-11-21T18:55:59.957 回答