C ++程序给出错误结果

时间:2017-02-02 14:58:56

标签: c++ function pointers

我真的不知道为什么这个程序不起作用。这是在指针的帮助下完成的。此程序计算偶数的整数,但屏幕显示: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;
}

3 个答案:

答案 0 :(得分:3)

首先看一下循环:for(i=0;i<y;i++) ;

在这里你有一个分号 ; - 这意味着你创建了一个空循环实际上什么都没有,除了设置iy

现在这个:if (*(x + i)... - 此处i等于y(在上一个循环之后),因此您可以访问一个超出范围的数组(x[y]无效,有效只是范围[0,x-1]中的索引)从而调用未定义的行为

正如@RyanP对你的问题的评论已经指出的还有一个问题:

int arr[n];&lt; - 这不应该编译(除非你使用一些特定的编译器扩展)

要创建具有动态大小的数组,您可以执行以下操作:

  1. int *a = new int[n];
  2. 或更好地使用std::vector用于此目的:

    1. 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作为实际输入的条目数。