所以我有一个 C++ 类(class)的家庭作业。并且(像所有人一样)我无法理解函数中的指针和引用。
我要创建原型(prototype)函数:
const double* avr(const double* arr, size_t size, double& average)
地点:
arr
- 是指向在 main 函数中声明的数组的指针
size
- 是一个数组的大小
average
- 是一个引用,稍后应该从数组中注入(inject)平均数 (arr[]
)
函数的要点是将数组元素的平均平均值注入(inject)变量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()
中。 (显然我不能改变原型(prototype)) - 如何将平均值传递给平均值引用?
提前致谢。
最佳答案
Why is the function
avr
a pointer? What does it point to?
这个函数返回一个指向常量float的指针,它返回一个指向最接近平均数的指针,但为什么是指针呢?我看不出任何原因,也许只是教育目的,我认为没有必要使用指针,应该尽量避免使用指针,这里按值返回会更好。
Is there a way to transfer a mathematics of size to the function
avr
?
不,你不能,你的函数得到一个指向你的数组的指针,编译器不知道指针指向什么,这意味着它现在不知道它包含什么,或者它有多少元素。所以你需要计算外面的大小,然后像你一样把它传递给函数。
how can I pass an mean average to a average reference?
不清楚你在这里问什么,但这里有一个解释可以帮助你理解通过引用传递:假设你有一个像 void func (int ¶m)
这样的函数,当你调用它时方法它在内部将声明一个名为 param
的 int reference
就像你可以在外面做的那样,然后它将是对你给定参数的引用,如你所知,引用是一个 <给定参数的 strong>别名,所以你只需传递你的变量(例如你有 int x;
只需调用 func (x);
)然后在函数 buddy param
将是 x
的别名并被使用。
请记住,当您通过引用传递参数时,对该参数的任何更改都会影响您原来传递的参数(它们是相同的,别名,还记得吗?),所以如果您想避免意外更改您不想更改的参数,更改您的函数以将其作为 constant reference
像这样 void func (int const ¶m);
关于c++ - 带有指针和引用的简单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47129079/