2017-08-16 72 views
-3

这是我执行的任务。指针与本地变量的关系

编写一个接受整数数组和大小的C++函数,并找到: a。 b。数组元素的总和 b。数组元素的平均值 c。数组中的最小值和最大值 在主程序中,使用动态内存分配声明一个由10个整数组成的数组,并调用上述函数。显示主功能内的输出。 (使用 参考输出值)。

//USER DEFINED FUNCTION " func " 
void func(int arr[], int size, int *sum, int *avg, int *min, int *max) 
{ 
    *sum = 0; 
    *min = arr[0]; 
    *max = arr[0]; 
    *avg = 0; 

//calculations for sum 

    for (int i = 0; i < size; i++) 
    { 
     *sum = *sum + arr[i]; 
    } 

//calculations for avg 

    *avg = *sum/size; 

//calculations for minimum 

    for (int i = 0; i < size; i++) 
    { 
     if (*min > arr[i]) 
      *min = arr[i]; 
    } 

//calculations for maximum 

    for (int i = 0; i < size; i++) 
    { 
     if (*max < arr[i]) 
     { 
      *max = arr[i]; 
     } 
    } 
} 

void main() 

{ 
    int *arr; 
    int size; 
    cout << "enter size of array " << endl; 
    cin >> size; 
    arr = (int*) calloc(size, sizeof(int)); 
    for (int i = 0; i < size; i++) 
    { 
     cout << "enter element : " << endl; 
     cin >> arr[i]; 
    } 
    int sum, avg, min, max; 
    func(arr, size, &sum, &avg, &min, &max); 
    cout << "sum is : " << sum << "\n avg is : " << avg << endl; 
    cout << "minimum is : " << min << endl; 
    cout << "the maximum is : " << max << endl; 
    getch(); 
} 

那是我的代码,它的工作的罚款,并给了我想要的结果,但他们这方面的任何替代,以及因为在“功能”的身体,我使用*分,* MAX,*平均,因为我已经通过了尽管我可以简单地通过引用传递值,并使用“min”而不是“* min”,但通过指针获取值。我想要一个关于如何通过指针传递值的建议,但不要在用户定义的函数体内使用一个解引用运算符,就像这里的“func”一样。

+1

不要在C++中使用'calloc'。 –

+2

阅读[参考资料](https://www.tutorialspoint.com/cplusplus/cpp_references.htm)。 –

+1

Ajay即使我在主函数中使用new和delete操作符,但如果“min”,我将不得不使用“* min”。 –

回答

1

您可以使用references来实现您的需要。

所以你的函数声明将变为

func(int arr[], int size, int &sum, int &avg, int &min, int &max) 

而且里面你可以直接使用变量minmaxavg

在主你将不得不为

调用
func(arr, size, sum, avg, min, max); 

最后,我会建议你创建局部变量,做他们所有的计算,他们最终屁股忽略传入引用的值(在大多数情况下,这可能会进行优化)。

1

要减少解引用混乱,请使用局部变量进行计算并在完成后写入参数。

例子:

void sum(const std::vector<int>& numbers, int* result) 
{ 
    int total = 0; 
    for (auto i: numbers) 
    { 
     total += i; 
    } 
    *result = total; 
} 

这有几个,除了其他好处可读性:

  • 它的速度更快,因为没有需要不断地阅读,并通过间接写。 (参考文献与这方面的指针一样糟糕。)
  • 如果引发异常,它将不修改out参数。
+0

感谢molbdnilo,我明白了。@Ajay你也在对我说这个事情,它用局部变量进行所有计算,并最终将它分配给像* result = total这样的参数。 –