【发布时间】:2020-06-07 12:24:46
【问题描述】:
我正在处理 Edabit 挑战:获取给定数组的算术平均值。现在我有这样的代码:
#include <iostream>
int data;
using namespace std;
int mean(int data);
int main()
{
int data[] = { 1, 2, 3, 4 };
cout << mean(data);
}
int mean(int data)
{
double mean = 0;
for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++)
{
mean += data[i];
}
mean /= sizeof(data) / sizeof(data[0]);
}
我被困住了。我在 Windows 7 Professional 上使用 Visual Studio 2019,并在 3 个字符下划线(data[i] 和 2x data[0])。对于这个 x Visual Studio 说 expression must have pointer-to-object type (Error E0142) 我不知道这意味着什么。我只知道指针是什么。
在 Visual Studio 中,我添加了 return 语句,但在此处缩短发布代码时忘记添加它。否则,这不是真正的问题。现在我不能在问题中添加它,因为 cmets 是错误的。 cmets 与上面的问题有关,但我真正的问题(对于坚持这个问题的未来读者)是:
如何将数组作为参数传递给函数。
现在,由于我更精通 C++,我知道术语以及如何表述它,而且我也知道这对于一个初学者来说并不是那么清楚:你不能只写 f(int[] arr)(你不能传递数组),但你必须写f(int* arr)(你可以传递一个指向该数组的指针)。那时我还不能随便搜索,因为我不太了解 C++ 术语。
【问题讨论】:
-
向a good textbook学习总是一个好主意。
-
int mean(int data)的参数是单个整数,而不是数组。sizeof也不适用于数组参数(请参阅 this),并且您在mean中缺少return。 -
@R Sahu 有没有在线的教科书?从教科书中学习是否比从错误中学习和通过小项目学习更好?
-
至于否决票:您的代码看起来好像您甚至没有阅读教科书的相关章节或其他一些结构化的教学材料。同样,如果您搜索错误消息,则可以在此站点上找到 许多 答案。由于这些原因,“没有显示任何研究努力”的反对理由似乎适用,imo。 SO 并不意味着可以替代一本好的教科书或教你。问题和答案也应该对其他读者有所帮助,请参阅meta.stackoverflow.com/questions/252677/…。
-
那么强烈建议您停止浏览各种网站,转而阅读good textbook。众所周知,大多数 C++ 教程网站都很糟糕。
标签: c++ arrays mean visual-studio-2019