为什么我们不能将int array []传递给hoo(int*&p)?

Mon*_*mer -2 c++ arrays pointers reference lvalue

在我的理解arrayint array[]={1,2,3,4,5}只是一个指向第一个元素的指针array.这意味着array可以将其分配给ptr类型的指针int*.

参数int* &pin hoo将通过引用传递参数.这意味着我们可以将传递的参数更改为指向其中的另一个值hoo.

void hoo(int* &p, int n)
{
    for (int i = 0; i < n; i++)
        cout << p[i] << endl;
}

int main()
{
    int array[] = { 1,2,3,4,5 };

    // I can do this
    int* ptr = array;
    hoo(ptr, 5);

    // but not this.
    //hoo(array, 5);
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能将int传递arrayhoo没有ptr

Fra*_*eux 7

在我的理解中,int array [] = {1,2,3,4,5}中的数组只是指向数组第一个元素的指针.

这是不正确的.数组是数组,指针是指针.它们是具有不同属性的不同类型.它们经常被混淆,因为数组具有它将急切地衰减到指向其第一个元素的指针的属性.

hoo(array, 5);尝试转换array为a int*但转换的结果是rvalue,不能绑定到非const引用.例如,如果您更改hooconst引用它将编译正常:

void hoo(int* const &p, int n) { }

int main()
{
    int array[] = { 1,2,3,4,5 };
    hoo(array, 5);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你无法改变指向的东西 p,使得参考的使用毫无意义.