【发布时间】:2019-01-09 19:34:31
【问题描述】:
据我了解,int array[]={1,2,3,4,5} 中的array 只是指向array 的第一个元素的指针。这意味着可以将array 分配给int* 类型的指针ptr。
hoo 中的参数int* &p 将通过引用传递参数。这意味着我们可以将传递的参数更改为指向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);
}
问题
为什么我们不能在没有 ptr 的情况下将 int array 传递给 hoo ?
【问题讨论】:
-
"
hoo中的参数int* &p将通过引用传递参数。这意味着我们可以将传递的参数更改为指向hoo中的另一个值。" i> 如果你试图在hoo中做p=nullptr怎么办?array的预期结果是什么? -
数组不是指向其第一个元素的指针。您的标题提出的问题与您的问题文本完全不同。您可以将
int[]传递给int*,但不能传递给int*&。 -
@tkausl 我编辑了问题标题,它使您的部分评论无效。
-
数组不是指针,句号。如果您将数组视为真正的数组,它将为您省去很多麻烦。是的,在大多数情况下它可以衰减为指针,但不要将其视为指针。此外,您可以停止使用原始数组并使用
std:array代替它们。他们会让这样的问题消失。 -
您是否正在尝试解决一些真正的问题,或者这只是为了学习目的?无论哪种情况,请使用
std::array或std::vector
标签: c++ arrays pointers reference lvalue