【问题标题】:Array ints not returning correctly数组整数未正确返回
【发布时间】:2016-08-27 19:07:47
【问题描述】:

我有一个数组,我试图声明它的所有单元格都等于 0。每次我尝试访问任何单元格时,除了第一个之外,它们总是返回 -858993460,这绝对不是 0。

这里是数组的声明:

int values[8] = { };

这是正在打印的数组单元格,它打印出 -858993460。

cout << value.values[1];

不过,这条线可以正常工作:

cout << value.values[0];

值对象的确切声明(Value是一个类):

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;
}

【问题讨论】:

  • minimal reproducible example 请像往常一样!
  • ^ 是按位异或运算符; 2^3 == 1.
  • 正如@KeithThompson 所说,您刚刚声明了一个包含1 个元素的数组,所以int values[(2 ^ 3)] = { 0,0,0,0,0,0,0,0 }; 会出错。
  • @user:对于像{ } 这样的聚合初始化器,未指定的值被初始化为零。

标签: c++ arrays


【解决方案1】:
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 个值。

【讨论】:

  • pow() 是一个浮点函数,其结果既不是常数也不是整数,因此不能用作数组维度。 1&lt;&lt;3(或只是8)会起作用。
  • 好吧,我忘了 c++ 没有指数函数,但你的解决方案只修复了第一个单元格。 cout &lt;&lt; value.values[1]; 仍然打印 -858993460。而valuesvalue的全局变量,这就解释了value.values
  • @WilliamThomas 您应该将value.values 的确切声明编辑到您的问题中,以便我们检查为什么value.values[1] 是垃圾。
  • @nwp 完成,但这是一个非常简单的行,如果您需要,我可以提供更多信息。
  • @WilliamThomas 如果不知道 Value 的声明,这并没有多大帮助。
【解决方案2】:

您似乎假设^ 是一个指数运算符。不是; C++ 没有指数运算符。 ^ 是按位异或,所以 2^3 == 1。如果您尝试访问索引大于0 的元素,您将得到垃圾(实际上是未定义的行为,但垃圾值是一种常见症状)。

你可以使用1 &lt;&lt; 3,它产生8——或者你可以只使用8

如果你要定义一个独立的对象,这应该可以工作:

int values[8] = { };

但如果values 实际上是结构或类的成员(正如您使用value.values[0] 所暗示的那样),那就另当别论了。如果您想了解这方面的信息,请更新问题以在正确的上下文中显示 values 的声明。

【讨论】:

  • 已更新,我确实需要有关全局数组声明的更多信息。
  • 您的更新使我的回答无效,这是您最初提出的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多