指针 与局部变量的关系
Pointers Relationship with local variable
这是我执行的任务。
编写一个接受整数数组和数组大小的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)
在内部,您可以直接将变量用作min
,max
,avg
等。
总的来说,你将不得不调用
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 参数不变。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- 局部变量名称冲突
- C++ lambda:如何'freeze'局部变量的值?
- 我应该使我的局部变量常量还是可移动的
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 返回对局部变量 - C++ 的引用
- 是否可以影响 C++ 中回调函数的局部变量?
- 警告 C4101 未引用的局部变量
- 指针 与局部变量的关系