我一直在遇到这个非常奇怪的错误,我的数组的元素将与另一个交换位置。我可以通过在编译之前手动更改元素来解决问题,但为了便于访问,我希望保持原样。我的目标是比较位并将结果存储在数组中。在我调用该函数后,我没有主动调用的函数,因此它不会更改数组本身。当我将数组声明为常量时,它完全相同。
这是我的阵列:
int myconsts[8][8] = {
{ 6, 10, 0, 9, 14, 6, 6, 7 }
};
我的问题是,数字14(myconsts[4]
)和7(myconsts[7]
)将随机交换位置。这是我如何比较函数中的位
std::array<std::array<int, 4>, 8> myfunct(int arr[][8]) {
std::array<std::array<int, 4>, 8> arr2;
int i = 0;
do {
std::bitset<4> num1(arr[0][i]);
std::bitset<4> num2(arr[1][i]);
std::bitset<4> num3(arr[2][i]);
int no;
int no2;
int no3;
for (int x = 0; x < 4; x++) {
int sum = 0;
std::cout << num1[x] << " Num: " << num1[0] << num1[1] << num1[2] << num1[3] << std::endl;
}
std::cout << " " << std::endl;
i++;
} while (i < 8);
//just testing the logic
arr2 = { 0 };
return arr2;
}
输出:
[0]
0 Num: 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[1]
0 Num : 0101
1 Num : 0101
0 Num : 0101
1 Num : 0101
[2]
0 Num : 0000
0 Num : 0000
0 Num : 0000
0 Num : 0000
[3]
1 Num : 1001
0 Num : 1001
0 Num : 1001
1 Num : 1001
这里是与原始元素交换位置的地方[7]! [4]
0 Num : 0111
1 Num : 0111
1 Num : 0111
1 Num : 0111
[5]
0 Num : 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[6]
0 Num : 0110
1 Num : 0110
1 Num : 0110
0 Num : 0110
[7]
1 Num : 1110
1 Num : 1110
1 Num : 1110
0 Num : 1110
它的元素[0..7],其间的每个空格代表一个新元素。我不确定它是否在所有编译器上都是一样的。
答案 0 :(得分:0)
我看不到你在描述什么。
以下是我的输出注释:
0 Num : 0111 // This is 2 + 4 + 8 = 14
1 Num : 0111
1 Num : 0111
1 Num : 0111
0 Num : 0110 // This is 2 + 4 = 6
1 Num : 0110
1 Num : 0110
0 Num : 0110
0 Num : 0110 // This is 2 + 4 = 6
1 Num : 0110
1 Num : 0110
0 Num : 0110
1 Num : 1110 // This is 1 + 2 + 4 = 7
1 Num : 1110
1 Num : 1110
0 Num : 1110
看起来你只是倾销:..., 14, 6, 6, 7 };
这是你阵列的最后4个元素。
我说一切看起来都是正确的。
也许你正在屏幕上向后阅读你的位,因为LSB(最低有效位) 通常 放在最右边,并且你已经把它放在最左边。
但是你的代码工作正常。