【问题标题】:Pass a reference to an array传递对数组的引用
【发布时间】:2016-06-06 02:42:00
【问题描述】:

考虑到我有以下数组:

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?

【问题讨论】:

标签: c++ arrays


【解决方案1】:

如果将int * a; 传递给您的函数,则主要缺陷是sizeof(a) 不会按照您的想法执行。它只是在编译时计算指针变量本身的大小。指针中没有任何信息表明它是使用new int[1000]; 分配的,大小为1000。

您需要使用附加参数显式传递数组大小,或者最好使用std::vector&lt;int&gt; a(1000);。

【讨论】:

    【解决方案2】:

    你不能只传递a, 应该是,

    func(a,1000);
    

    你的功能是,

    void func( ??? ) --> `void func( int *a, size_t size)

    【讨论】:

    • 这是错误的。 a 是一个指针,所以 sizeof(a) 将(可能)是 8 个字节。
    【解决方案3】:

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

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

    以上将只接受大小为 1000 的 int 数组 - 不多也不少。

    不过,您没有传递数组。您正在传递一个指针,因此您需要传递大小:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2016-03-24
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      相关资源
      最近更新 更多