我真的不知道为什么这个程序不起作用。这是在指针的帮助下完成的。此程序计算偶数的整数,但屏幕显示:0或1
这是......
#include <iostream>
using namespace std;
int evencount(int* x, int y)
{
int i, even = 0;
for (i = 0; i < y; i++);
{
if (*(x + i) % 2 == 0) {
even++;
}
}
return (even);
}
int main(void)
{
int n;
cout << "Enter size of array: ";
cin >> n;
int arr[n];
cout << "Enter elements: ";
for (int i = 0; i < n; i++) {
cin >> *(arr + i);
}
int num;
num = evencount(arr, n);
cout << "Even count=" << num;
return 0;
}
答案 0 :(得分:3)
首先看一下循环:for(i=0;i<y;i++)
;
在这里你有一个分号 ;
- 这意味着你创建了一个空循环实际上什么都没有,除了设置i
到y
。
现在这个:if (*(x + i)...
- 此处i
等于y
(在上一个循环之后),因此您可以访问一个超出范围的数组(x[y]
无效,有效只是范围[0,x-1]中的索引)从而调用未定义的行为。
正如@RyanP对你的问题的评论已经指出的还有一个问题:
int arr[n];
&lt; - 这不应该编译(除非你使用一些特定的编译器扩展)
要创建具有动态大小的数组,您可以执行以下操作:
int *a = new int[n];
或更好地使用std::vector
用于此目的:
std::vector<int>(n);
答案 1 :(得分:1)
for(i=0;i<y;i++);
你在这个for循环中什么都不做,所以总是检查一个元素。位于y
i
的位置将通过for循环增加到该点。
位置y
中的元素因此未定义且超出范围,从而导致未定义的行为。
答案 2 :(得分:-3)
我看到的一个问题是您正在尝试动态分配数组。在已编译的程序中,您需要具有固定的arr分配。尝试将arr声明为int arr [100]。您仍然可以让用户输入n作为实际输入的条目数。