c++ - 数组和sizeof麻烦编译错误C++

标签 c++ arrays compilation compiler-errors sizeof

我正在写一个基于数组的代码,在编译失败后引发了一些令人困惑的错误。我在互联网上搜索了一些或多或少理解的示例代码,但对我自己的代码/思考过程中的错误识别很有帮助。

当前的任务是创建一个函数,该函数接受未知数量的整数数组并求和该数组中的偶数。有人告诉我该数组的最后一个条目为-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/

相关文章:

c++ - 数组与 std::initializer_list 作为函数参数

css - 更改部分样式表时自动编译 SASS 样式表

c++ - 读取管道输入

c++ - 复制/move 省略与显式删除的复制/move 构造函数

Javascript 动态数组和对象

c++ - QImage数组的动态分配

gcc - 如何限制 GCC 中的自动矢量化级别?

c++ - 这些编译器选项放到一个 CMakeLists.txt 中

c++ - 指针和指向引用的指针

c++ - 如何使用 boost asio 将繁忙的端点与未连接的端点区分开来