我正在写一个基于数组的代码,在编译失败后引发了一些令人困惑的错误。我在互联网上搜索了一些或多或少理解的示例代码,但对我自己的代码/思考过程中的错误识别很有帮助。
当前的任务是创建一个函数,该函数接受未知数量的整数数组并求和该数组中的偶数。有人告诉我该数组的最后一个条目为-1,但我认为此信息无用。
这是我的代码:
#include <iostream>
using namespace std;
int sumEven(int myArray[])
{
int len = (sizeof(myArray) / sizeof(myArray[0]));
int i = 0;
int count = 0;
while (i < len)
{
if (myArray[i] % 2 == 0)
{
count = count + myArray[i];
}
i++;
}
return count;
}
我尝试将
len
定义为数组元素的数量。我认为这行不通,因为有一个错误涉及以下行:prog.cpp:13:18: error: sizeof on array function parameter will return size of 'int *' instead of 'int []' [-Werror,-Wsizeof-array-argument]
int len = (sizeof(myArray) / sizeof(myArray[0]));
^
prog.cpp:11:17: note: declared here
int sumEven(int myArray[])
^
1 error generated.
我有Matlab,Mathematica和Python的经验,因此我的C++格式可能很奇怪。谢谢参观。
最佳答案
问题是当数组作为参数传递给函数时,数组会衰减为指向第一个元素的指针,因此函数
int sumEven(int myArray[]) { ... }
实际上等于
int sumEven(int *myArray) { ... }
获取指针的大小将返回指针的大小,而不是其指向的大小。
如果您需要知道函数的大小,则应将元素数量作为参数传递:
int sumEven(int *myArray, size_t len) { ... }
关于c++ - 数组和sizeof麻烦编译错误C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194154/