c++ - 为什么我们不能将 int array[] 传递给 hoo(int* &p)?
问题描述
在我的理解array
中int array[]={1,2,3,4,5}
只是一个指向第一个元素的指针array
。这意味着array
可以将其分配给ptr
类型的指针int*
。
参数int* &p
inhoo
将通过引用传递参数。这意味着我们可以将传递的参数更改为指向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 传递array
给hoo
without ptr
?
解决方案
在我的理解中, int array[]={1,2,3,4,5} 中的数组只是指向数组第一个元素的指针。
这是不正确的。数组是数组,指针是指针。它们是具有不同属性的不同类型。他们经常感到困惑,因为数组具有会急切地衰减为指向其第一个元素的指针的属性。
hoo(array, 5);
尝试转换array
为,int*
但该转换的结果是右值,不能绑定到非const
引用。例如,如果您更改hoo
为const
引用,它将编译得很好:
void hoo(int* const &p, int n) { }
int main()
{
int array[] = { 1,2,3,4,5 };
hoo(array, 5);
}
在这种情况下,您无法更改指向的内容,从而使引用的使用毫无意义。 p
推荐阅读
- sql - 一种方式 SQL server dbs之间的数据传输技术,除了跨国复制
- arrays - $_POST PHP 数组
- virtualbox - 如何从崩溃的 Virtualbox VM 中恢复丢失的数据?
- c# - 如何在给定字符串中查找数字的索引
- node.js - 如何使用我的 nodejs-express 应用程序处理被重定向为 https 的 http 请求?
- unity3d - 图像像素的坐标以在纹理上进行坐标
- c - char 字符串使我的 while 循环退出?
- javascript - TypeError: loginScreen.visibleOfWelcome 不是函数
- javascript - JavaScript Vuex 或日期错误
- node.js - 在 Angular 5 服务发布请求中处理离线服务器