指针 与局部变量的关系

Pointers Relationship with local variable

本文关键字:关系 局部变量 指针      更新时间:2023-10-16

这是我执行的任务。

编写一个接受整数数组和数组大小的C++函数,并找到: 一个。数组中元素的总和 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();
}

这是我的代码,它工作正常并给了我想要的结果,但他们也是任何替代品,因为在"func"主体中,我使用 *min,*max,*avg,因为我通过指针传递了一个值,尽管我可以简单地通过引用传递值并使用"min"而不是"*min"。我想要一个关于如何通过指针传递值的建议,但不要在用户定义函数的主体中使用取消引用运算符,就像这里的"func"一样。

您可以使用引用来实现所需的内容。

所以你的函数声明将更改为

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

在内部,您可以直接将变量用作minmaxavg等。

总的来说,你将不得不调用

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

最后,我建议您创建局部变量,在其中进行所有计算,然后最终将值分配给传递的引用(在大多数情况下,这可能会有所优化(。

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

例:

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

除了可读性之外,这还有其他一些好处:

  • 它更快,因为无需通过间接寻址不断读取和写入。(在这方面,参考文献与指针一样糟糕。
  • 如果某些内容引发异常,它将保留 out 参数不变。