数组和sizeof编译错误C++时出现问题
Array and sizeof troubles compiling errors C++
我正在编写一个基于数组的代码,它在编译失败后给我带来了一些令人困惑的错误。我在互联网上搜索了我或多或少理解的示例代码,但这对我识别自己的代码/思维过程中的错误很有帮助。
手头的任务是创建一个函数,该函数接受未知数量的整数数组,并对数组中的偶数求和。我被告知数组的最后一个条目是-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) { ... }
当您将数组传递给函数时,数组会衰减为指针。这意味着有关阵列大小的信息将丢失。
这意味着(sizeof(myArray) / sizeof(myArray[0]))
在此上下文中不会执行您想要的操作,因为这里myArray
是一个指针。
规范的解决方案是添加另一个表示数组大小的参数,然后使用它。这是C.中使用的方法
然而,在C++中,您可能应该使用std:: vector
,除非您有特定的理由坚持使用数组,因为数组是出了名的容易出错。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题