Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针与局部变量的关系_C++ - Fatal编程技术网

C++ 指针与局部变量的关系

C++ 指针与局部变量的关系,c++,C++,这就是我完成的任务 编写一个C++函数,它接受整数数组和数组大小,并发现: A.数组中元素的总和 B数组元素的平均值 C数组中的最小值和最大值 在主程序中,使用动态内存分配和调用声明一个由10个整数组成的数组 上述功能。在主屏幕中显示功能的输出。(使用电话 输出值的参考) //用户定义函数“func” void func(int arr[],int size,int*sum,int*avg,int*min,int*max) { *总和=0; *min=arr[0]; *max=arr[0]; *

这就是我完成的任务

编写一个C++函数,它接受整数数组和数组大小,并发现: A.数组中元素的总和 B数组元素的平均值 C数组中的最小值和最大值 在主程序中,使用动态内存分配和调用声明一个由10个整数组成的数组 上述功能。在主屏幕中显示功能的输出。(使用电话 输出值的参考)

//用户定义函数“func”
void func(int arr[],int size,int*sum,int*avg,int*min,int*max)
{
*总和=0;
*min=arr[0];
*max=arr[0];
*平均值=0;
//求和
对于(int i=0;iarr[i])
*最小值=arr[i];
}
//最大值的计算
对于(int i=0;i
因此,您的函数声明将更改为

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;
}
无效和(常量标准::向量和数字,整数*结果) { int-total=0; 用于(自动i:数字) { 总数+=i; } *结果=总数; }
除了可读性之外,这还有几个其他好处:

  • 它更快,因为不需要通过间接寻址不断地读写(在这方面,引用和指针一样糟糕)
  • 如果有东西抛出异常,它会保留out参数不修改

用C++不使用<代码> CALLC< <代码>阿杰伊。即使在main函数中使用新的和删除操作符,我仍然必须使用“*min”来代替“min”。谢谢,它确实很有用。我知道我必须通过引用传递值,但是我决定通过指针传递它来检查我是如何处理它的。(如何使它不那么复杂)。谢谢molbdnilo,我明白了。@Ajay你也对我说了这件事:^用局部变量进行所有计算,最后将其分配给参数,如*result=total?
void sum(const std::vector<int>& numbers, int* result)
{
    int total = 0;
    for (auto i: numbers)
    {
        total += i;
    }
    *result = total;
}