我有一个数组,我试图声明所有它的单元格等于0.每次我尝试访问任何单元格,除了第一个,它们总是返回-858993460,这绝对不是0
这是数组的声明:
int values[8] = { };
这是打印的阵列单元格,打印出来-858993460。
cout << value.values[1];
这条线很好用,但是:
cout << value.values[0];
值对象的确切声明(Value是一个类):
Value value;
价值宣言类:
#pragma once
class Value{
public:
int values[8] = { };
Value();
~Value();
};
只有第一个单元格打印0,那么如何声明一个所有单元格为0的数组?
对于任何其他信息,这里有足够的代码来重现问题(将其与Value
的声明结合起来:
#include <iostream>
#include "Value.h"
using namespace std;
int main(){
char null;
Value value;
cout << value.values[1];
cin >> null; //this just holds up the program so I have time to read what it printed
return 0;
}
答案 0 :(得分:3)
int values[(2 ^ 3)] = { };
std::cout << values[0];
如您所料生成0。 value.values
是您未展示的其他值。
2 ^ 3
等于1
,您可能需要pow
的版本。这就解释了为什么你得到了
初始化变量太多
当您使用int values[(2 ^ 3)] = { 0,0,0,0,0,0,0,0 };
时,因为values
只有1个元素。
int values[8] = {};
会使用0
正确初始化所有8个值。
答案 1 :(得分:1)
您似乎假设^
是一个取幂运算符。它不是; C ++没有取幂运算符。 ^
是按位xor,所以2^3 == 1
。如果您尝试访问索引大于0
的元素,您将获得垃圾(实际上是未定义的行为,但垃圾值是常见症状)。
您可以使用1 << 3
,这会产生8
- 或者您可以使用8
。
如果你要定义一个独立的对象,这应该有用:
int values[8] = { };
但如果values
实际上是结构或类的成员(正如您使用value.values[0]
所暗示的那样),那么它就是另一回事。如果您想了解相关信息,请更新问题以在正确的背景下显示values
的声明。