在 c++ 代码中将数组传递给函数错误
Passing arrays to functions in c++ code error
我正在学习C++,我不知道为什么这段代码输出正确数量的输出(4(,而只输出数字54。有人可以帮助修复它并解释我做错了什么吗?
#include <iostream>
using namespace std;
void pi(int arr[],int x){
for(int c = 0;c < x;c++){
cout << arr[x] << endl;
}
}
int main()
{
int _arr[4] = {3543,146,961262,-242};
pi(_arr, 4);
}
您将数组限制与索引器混淆了。应该是:
cout << arr[c] << endl;
数组的索引为零。您正在尝试打印出越界的元素,从而调用未定义的行为。根据平台的不同,您的输出可能看起来像四个0
或类似-858993460
.按照惯例,计数器变量通常以字母i
开头。
由于x
是 4,所以arr[x]
是arr[4]
。但是_arr
只有四个条目,它没有第五个条目。所以你在输出垃圾。你可能的意思是arr[c]
在循环中。
更改
cout << arr[x] << endl;
自
cout << arr[c] << endl;
函数内部循环中有一个拼写错误
for(int c = 0;c < x;c++){
cout << arr[x] << endl;
^^^
}
应该有
for(int c = 0;c < x;c++){
cout << arr[c] << endl;
^^^
}
它是用作数组索引的变量c
。
然而,该程序有几个缺点。
不应使用以下划线开头的标识符。编译器实现可以保留此类名称。
不要使用"幻数"。它们通常是错误的原因。
要存储对象或数组的大小,请使用类型size_t
而不是类型int
。
该函数不会更改数组。所以相应的参数应该用限定符const
来声明。
该程序可以如下所示
#include <iostream>
void pi( const int arr[], size_t n )
{
for ( size_t i = 0; i < n; i++ )
{
std::cout << arr[i] << std::endl;
}
}
int main()
{
int arr[] = { 3543, 146, 961262,-242 };
pi( arr, sizeof( arr ) / sizeof( *arr ) );
}
考虑到您可以使用标准算法输出数组,例如std::for_each
或std::copy
。
下面是一个演示程序,它使用标准算法std::copy
输出数组。
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
int arr[] = { 3543, 146, 961262,-242 };
std::copy( std::begin( arr ),
std::end( arr ),
std::ostream_iterator<int>( std::cout, "n" ) );
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误