【问题标题】:Int value oddly resembles a pointerInt 值奇怪地类似于指针
【发布时间】:2015-01-04 19:36:13
【问题描述】:

我已经发布了一些我在这里写的代码:http://ideone.com/2TrjcN 包含在给定的输出中。 这是它的另一个副本:

#include <iostream>
using namespace std;

int Problem2(void);

int main() 
{
    int sum2 = Problem2();
    cout << "sum2 is: " << sum2 << endl;
}

int Problem2 (void)
{
    int sum = 0;
    int isEvenPrev = 0;
    int isEvenCurr = 2;

    for (int i=3 ; i<20; i++)
    {
            // determine if i is even
            if (i%2 == 0)
            {
                    isEvenPrev = isEvenCurr;
                    isEvenCurr = i;
                    sum += (isEvenPrev + isEvenCurr);
                    cout << "isEvenPrev: " << isEvenPrev << cout << " isEvenCurr: " << isEvenCurr    << " sum: "<< sum << endl;
            }
    }

    return sum;
}

我对小算法相当有信心,其目的是: "斐波那契数列中的每一项新项都是通过将前两项相加生成的。从 1 和 2 开始,前 10 项将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

通过考虑斐波那契数列中值不超过四百万的项,求偶数项之和。 "

isEvenPrev 的值被打印为看起来像指针的东西,但我所做的只是将一个已经是 int 的值设置为另一个已经是 int 的值。

谁能告诉我哪里可能出错了。斐波那契数列实际上是有效的,直到我得到非常大的值。然后总和变为负数。

【问题讨论】:

  • 总和变为负数,因为您溢出了int,请改用long long。至于显示指针,请参见 lared 的回答:您正在使用 cout 然后向其发送 basic_ostream 对象(第二个 cout),然后 void*void* 指针重载basic_ostream&lt;&gt;::operator&lt;&lt; 开始。
  • 天哪。也谢谢你的解释。

标签: c++ pointers integer


【解决方案1】:

从此行中删除第二个cout

 cout << "isEvenPrev: " << isEvenPrev << cout << " isEvenCurr: " << isEvenCurr    << " sum: "<< sum << endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多