为什么这个程序打印-58684322800B5FD80?

时间:2017-10-29 11:25:13

标签: c++

valLayers

我做错了什么?

不打印:

#include "stdafx.h"
#include <iostream>
using namespace std;


int main()
{
        int x[3];
        int i;
        int pause;
        for (i = 0; x[i] < 10; i++); {
                x[i] *= x[i];
                cout << x[i];
        }
        cout << x;
        cin >> pause;

    return 0;
}

我对C ++很陌生,所以我可能误用了一个循环。

由于

3 个答案:

答案 0 :(得分:1)

您需要初始化数组内容。编译器不会为你做这件事。

即使这样,你也需要将它们初始化为零以外的东西,否则循环永远不会终止。

您的算法也容易受到在数组范围之外写入的影响。你确定我永远不会超过2吗?我不是。

最后你的cout调用将输出由于指针衰减而导致x的第一个元素的地址。要输出实际元素,请使用x [i]或类似。

答案 1 :(得分:1)

读取/写入未初始化的变量将产生未定义的行为。

在您的情况下,您应该在使用之前初始化数组。

int x[3] = {4, 5, 6};

这也不是如何迭代数组元素:

 for (i = 0; x[i] < 10; i++);{}

上面你应该检查i是否小于数组的大小(3)而不是值10。

同时删除分号;因为在您的代码中不会发生迭代,for loop下方的主体将执行一次。

所以你的代码看起来像是:

    int x[3] = {4, 5, 6};

    for (int i = 0; i < 3; i++) {
        x[i] *= x[i];
        std::cout << x[i];
    }

   std::cin.get();
  • 正如我猜测的那样,你想要的输出和循环是什么,我用数组填充数组:4, 5, 6;

  • 此外,您不应该以这样的方式打印数组的元素:

    std :: cout&lt;&lt; X;

上面只打印第一个元素x[0]的地址,因为数组的名称将衰减到指向其第一个元素(元素0)的指针。

std::cout << *x; // will print 16 (4 * 4). Which is the first element.

使用迭代打印或分配所有元素:

for(int i(0); i < 3; i++)
    std::cout << x[i] << ", ";

答案 2 :(得分:1)

您必须初始化阵列。 不对局部变量执行默认初始化。 这就是打印垃圾价值的原因。