【问题标题】:Two different ways of passing an array by reference. Which one is more correct?通过引用传递数组的两种不同方式。哪一个更正确?
【发布时间】:2017-03-20 16:19:08
【问题描述】:

我知道通过引用修改数组的函数来传递数组的两种方法。我只是想知道如果我有大型数组,哪种方式更准确或更快?

第一个例子:

这里我直接传递数组并在函数中对其进行操作。

#include <stdlib.h>
#include <stdio.h>

void changeArray(int* vec, int sizeArray)
{
     for(int i=0; i<sizeArray; i++)
     {
          vec[i] = vec[i] + 1000;
     }
}

int main()
{
     int n = 10;
     int*vec = NULL;
     vec = (int*)malloc(sizeof(int)*n);

     printf("Before\n");
     for(int i=0; i<n; i++)
     {
          vec[i] = i+1;
          printf("%d ", vec[i]);
     }

     changeArray(vec,n);

     printf("\nAfter\n");
     for(int i=0; i<n; i++)
     {
          printf("%d ", vec[i]);
     }
     printf("\n");

free(vec);
return 0;
}

秒示例:

在这个例子中,我传递了我的数组的地址。我在这里发送一个指向函数的指针吗? changeArray() 函数看起来更复杂。对于相同的结果,这只是一个漫长的过程吗?

#include <stdlib.h>
#include <stdio.h>

void changeArray(int** vec, int sizeArray)
{
     for(int i=0; i<sizeArray; i++)
     {
          (*vec)[i] = (*vec)[i] + 1000;
     }
}

int main()
{
     int n = 10;
     int*vec = NULL;
     vec = (int*)malloc(sizeof(int)*n);

     printf("Before\n");
     for(int i=0; i<n; i++)
     {
          vec[i] = i+1;
          printf("%d -> ", vec[i]);
     }

     changeArray(&vec,n);

     printf("\nAfter\n");
     for(int i=0; i<n; i++)
     {
          printf("%d -> ", vec[i]);
     }
     printf("\n");

free(vec);
return 0;
}

我是编程新手。所以也许这个问题不是一个好问题。

【问题讨论】:

    标签: c arrays function reference malloc


    【解决方案1】:

    我只是想知道如果我有大型数组,哪种方式更准确或更快?

    第一种方法最正确,永远不会比第二种方法慢。

    在这个例子中,我传递了我的数组的地址。

    不,您将指针的地址传递给数组中的第一个元素。

    对于相同的结果,这只是一个漫长的过程吗?

    是的,这个功能是不必要的复杂,你从中得不到任何好处。使用第一个版本。

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多