传递对数组的引用

时间:2016-02-24 01:14:33

标签: c++ arrays

考虑到我有以下数组:

int * a = new int[1000];

我想通过引用将此数组传递给函数。如果我要从main调用此函数:

int main()
{
    int * a = new int[1000];
    func(a);
    //print the elements of the array
    for(int i=1;i<=sizeof(a);i++) cout<<a[i]<<" ";
    return 0;
}

我的功能是:

void func( ??? )
{
//write some elements in the array
for(int i=1;i<=sizeof(a);i++) a[i]=i;
}

我如何声明func

3 个答案:

答案 0 :(得分:3)

如果将sizeof(a)传递给您的函数,那么主要缺陷是int * a;没有做您认为的操作。它只是在编译时计算指针变量本身的大小。使用new int[1000];并且大小为1000的指针没有保留指针的信息。

您需要使用其他参数显式传递数组大小,或者更好地使用std::vector<int> a(1000);

答案 1 :(得分:1)

你不能只是通过a, 它应该是,

func(a,1000);

你的功能将是,

void func(???) - &gt; `void func(int * a,size_t size)

答案 2 :(得分:1)

这个想法是接受一定大小的整数数组。

void func(int (&arr)[1000]) {
  // insert logic here
}

上述内容只接受 1000 int数组 - 不多也不少。

但是你没有传递数组。你正在传递一个指针,所以你需要传递大小:

void func(int *arr, size_t n) {
  // insert logic here
}