【发布时间】:2020-08-03 14:36:48
【问题描述】:
当我尝试使用指针访问数组元素时出现此错误,我不明白如何在指针的帮助下访问。
Error: cannot convert ‘int (*)[5]’ to ‘int*’ for argument ‘1’ to ‘void addd(int*, int)
任何关于此事的指导将不胜感激!
#include <iostream>
using namespace std;
void addd(int *ptr,int length)
{
cout<<"The values in the array are: ";
for(int i = 0; i < length; i++) {
cout<< *ptr <<" ";
ptr++;
}
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
addd(&arr,5);
//int *ptr = &arr[0];
return 0;
}
【问题讨论】:
-
呼叫应该是
addd(arr,5);或addd(&arr[0],5);。 -
@IanAbbott - 我将其限制为
addd(arr,5),取第一个元素的地址(虽然等效)表明对数组/指针转换的误解。 -
@DavidC.Rankin 我虽然最好让 OP 弄清楚为什么这两者是等价的。
-
两者都提供了相同的结果,但第一个表示理解,在访问时,数组被转换为指向其第一个元素的指针,而第二个使用 地址 运算符来完成同样的事情。我提到它的唯一原因是,附加
'&'以尝试创建指针的问题通常显示出对两者的缺乏和理解。:). -
我猜使用
&arr[0]的一个优点是,如果或当OP 使用std::array或std::vector时,代码现在可以互换。
标签: c++ arrays data-conversion