打印数组digitArray
和testo
的值会显示不正确的值。
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)
答案 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>
如果尺寸可能会有所不同。