获取错误的数组值

时间:2015-03-24 14:57:06

标签: c++ arrays

打印数组digitArraytesto的值会显示不正确的值。

Display.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include "display.h"

#define D0 26
#define D1 27
#define D2 28
#define D3 29
#define BL 15
#define BM 16
#define BR 4
#define MI 5
#define TL 10
#define TM 11
#define TR 6
#define DOT 1

int segmentArray[8] = {BL, BM, BR, MI, TL, TM, TR, DOT};
int digitArray[4] = {D0, D1, D2, D3};
int testo[4] = {260, 1,2,3};

//Sets all segments on
void Display::test() {
    std::cout << digitArray[0] << std::endl;
    std::cout << D0 << std::endl;
    std::cout << testo[3] << std::endl;
    std::cout << segmentArray[0] << std::endl;
}

Display.h

class Display {
    public:
        void test();

    private:
        int SegmentArray[8];
        int digitArray[4];
        int testo[4];
};

main.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "display.h"

int main() {
    Display display;
    display.test();

    return 0;
}

运行此代码会给我:

35588 (incorrect, varies from time to time and appears to be some adress)
26 (correct)
0 (incorrect)
15 (correct)

2 个答案:

答案 0 :(得分:0)

我测试你的代码并获得这个值:

26
3 
26
15

当您编写digitArray [0]时,您将获得数组中索引0的值。 在你的情况下26。 对于第二个输出,你编写testo [3],这样你得到数组的第四个索引,所以值3。 请记住,数组从C ++中的索引0开始......

重新编译您的代码,也许您的最新修改将无法保存... 你的第一个结果似乎是一个地址。

答案 1 :(得分:0)

calcSegments返回一个指向本地数组的指针,该数组在您尝试访问它时已被销毁。数组是非常讨厌的东西,不能通过值返回(直接),所以我建议返回

  • std::array<int, 8>如果在所有情况下已知大小为
  • std::vector<int>如果尺寸可能会有所不同。