使用参数int *将int []传递给函数

时间:2015-06-29 05:46:31

标签: c++ pointers arguments

我的一个函数以int *作为参数,但我是int[],我该如何将参数传递给它?

我使用这种方法,但我觉得效率不高:

void myFunc(int * ar);
...
int main(){
  int ar[]={1,2,3,4,5};
  int *ar2=new int [5];
  memcpy(ar2,ar,5*sizeof(int));
  myFunc(ar2);
}

传递数组本身会导致编译错误。

4 个答案:

答案 0 :(得分:3)

您可以直接将int []作为int *参数传递。数组可以衰减为指针。

此代码将编译:

void myFunc(int * ar);
...
int main(){
  int ar[]={1,2,3,4,5};
  myFunc(ar);
}

答案 1 :(得分:1)

你可以通过参数int[]传递int *,但函数不能知道数组的长度。所以你应该再添加一个参数给函数,例如:{{1} }

答案 2 :(得分:0)

可以将数组转换为指针,以便您可以像这样传递参数:

  

myFunc的(AR2);

因为ar2是一个数组,我们可以传递数组因为myFunc中的参数 指向一个int的指针,即ar2

继承人如何运作

#include <iostream>
#include <string.h>

using namespace std;

void myFunc(int *ar)
{
for (int i = 0; i != 5; ++i)
    std::cout << *(ar + i ) << std::endl;

}

int main()
{
int ar[]={1,2,3,4,5};
int *ar2=new int [5];

memcpy(ar2,ar,5*sizeof(int));
myFunc(ar2);

delete ar2; /// dont forget to de allocate :)
return 0;
}

输出

1
2
3
4
5

答案 3 :(得分:0)

你可以通过传递数组的名称,即ar。

来做到这一点
  

数组的名称实际上是数组的第一个元素的地址,因此在一个带有int *ar类型参数的函数中传递它就是这样做的方法!

myFun(ar)可以正常工作;