当我尝试使用pointer访问数组元素时,我遇到了这个错误,我不明白如何使用pointer来访问。
错误:无法将参数“%1”的“int(*)[5]”转换为“int*”,将其转换为“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);
然后将数组隐式转换为指向其第一个元素的指针,即int*
。 不依赖隐式转换,您可以使其显式:
addd( &arr[0],5);
// ^- first element
// ^------ address-of first element
但是,数组不是指针,接受数组的地址会产生指向数组的指针:
using pointer_to_array = int (*)[5];
pointer_to_array p = &arr;
您的函数接收到一个指向int
的指针,因此您应该只传递第一个元素的地址。
您可以这样做:
addd(&arr[0],5);
或者简单地说:
addd(arr,5);
你做错了。 &arr
表示int(*)[5]
,但您使用的是int*ptr
。 所以,你必须使用如下所示:
addd(arr, 5); // this is correct
// addd(&arr, 5) // this is wrong
在这里,arr
作为int*
传递