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 ++很陌生,所以我可能误用了一个循环。
由于
答案 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)
您必须初始化阵列。 不对局部变量执行默认初始化。 这就是打印垃圾价值的原因。