带指针和引用的简单函数

时间:2017-11-06 02:55:31

标签: c++ arrays pointers

所以我为我的c ++课程做了一个功课。而且(像每个人一样)我无法理解函数中的指针和引用。

我要创建一个原型功能:

const double* avr(const double* arr, size_t size, double& average)

其中:

arr - 是指向在main函数

中声明的数组的指针

size - 是数组的大小

average - 是一个参考,以后应该从数组中注入平均值(arr[]

函数的关键是用数组元素的平均值注入变量average,然后将指针返回到数组的元素,该数组最接近这个平均值

例如下面的程序:

double arr[] = {1,2,3,4,5,7};
size_t size = sizeof(arr) / sizeof(arr[0]);
double average = 0;
const double* p = aver(arr, size, average);
cout << *p << " " << average << endl;
应该打印

4 3.66667

我不想做捷径,所以我不希望得到答案。 不过我确实有一些问题。

  • 为什么函数avr是一个指针?它指的是什么?
  • 有没有办法将大小的数学转移到函数avr?我的意思是 - 我希望保持main()干净,并将size_t大小的数学作品保存在avr()中。 (显然我无法改变原型)
  • 如何将平均值平均值传递给平均值?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

为什么函数avr是一个指针?它指的是什么?

这个函数返回一个指向常量float的指针,它返回一个指向最接近的平均数的指针,但为什么它是指针呢?我看不出任何理由,也许它只是有教育目的,我认为没有必要尽可能避免使用指针和指针,这里按值返回会更好。

  

有没有办法将大小的数学转移到函数avr

不,你不能,你的函数得到一个指向你的数组的指针,编译器不知道指针指向的是什么,这意味着它现在不包含它包含的内容,或它有多少元素具有。所以你需要计算外面的大小并将其传递给你的功能。

  

如何将平均值平均值传递给平均值?

不清楚你在这里问的是什么,但这里有一个解释,可能有助于你理解通过引用传递:考虑你有一个像void func (int &param)这样的函数,这里当你调用这个方法时,它在内部会声明一个{{ 1}}就像你在外面做的那样命名为int reference,然后它会给你一个给定参数的参考,你知道参考是给定参数的别名,所以你只需要通过你的变量(例如你有param只调用int x;)然后在函数伙伴func (x);中将是param的别名并被使用。

在通过引用传递参数时请记住这一点,对该参数的任何更改都会影响原始传递的参数(它们是相同的,Alias,还记得吗?),所以如果你想让自己不小心改变您不想更改的参数,请将此功能更改为x constant reference