首页 > 解决方案 > 为什么我们不能将 int array[] 传递给 hoo(int* &p)?

问题描述

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

参数int* &pinhoo将通过引用传递参数。这意味着我们可以将传递的参数更改为指向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);
}

问题

为什么我们不能将 int 传递arrayhoowithout ptr

标签: c++arrayspointersreferencelvalue

解决方案


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

这是不正确的。数组是数组,指针是指针。它们是具有不同属性的不同类型。他们经常感到困惑,因为数组具有会急切地衰减为指向其第一个元素的指针的属性。

hoo(array, 5);尝试转换array为,int*但该转换的结果是右值,不能绑定到非const引用。例如,如果您更改hooconst引用,它将编译得很好:

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

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

在这种情况下,您无法更改指向的内容,从而使引用的使用毫无意义。 p


推荐阅读