gpt4 book ai didi

c++ - 如何使用指针为矩阵编写单循环

转载 作者:行者123 更新时间:2023-11-28 02:24:46 24 4
gpt4 key购买 nike

为什么我不能使用下面的代码?我知道矩阵的定义就像一个一维数组,彼此紧随其后。

我怎样才能让它成为可能?

我需要的只是优化。

MyStructure* myStructure[8][8];
int i = 0;

for(MyStructure* s = myStructure[0][0]; i<64; i++,s++)
{

}

最佳答案

因为用指向对象的指针来证明这一点比较困难,所以我用公共(public)整数代替了指向 MyStructure 的指针。间接级别不变,间接级别对 OP 的问题很重要。

顺便说一下,不要这样做。使用 Ediac 的解决方案。我只是想指出 OP 哪里出了问题。在一维中遍历二维数组可能可行。它可能不会。祝你调试愉快!这之所以有效,是因为将二维数组实现为一维数组很容易,但据我所知,这种行为并不能得到保证。 vector 或其他传统的动态数组解决方案当然不能保证。如果我错了,请打我一巴掌。

#include <iostream>

using namespace std;

//begin function @ Seraph: Agreed. Lol.
int main()
{
// ordering the array backwards to make the problem stand out better.
// also made the array smaller for an easier demo
int myStructure[4][4] = {{16,15,14,13},{12,11,10,9},{8,7,6,5}, {4,3,2,1}};
int i = 0;

// here we take the contents of the first element of the array
for (int s = myStructure[0][0]; i < 16; i++, s++)
{ //watch what happens as we increment it.
cout << s << " ";
}
cout << endl;
// output: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
// this didn't iterate through anything. It incremented a copy of the first value

// reset and try again
i = 0;
// this time we take an extra level of indirection
for (int * s = &myStructure[0][0]; i < 16; i++, s++)
{
// and output the value pointed at
cout << *s << " ";
}
cout << endl;
// output: 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
// now we have the desired behaviour.
} //end function end Lol

输出:

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

关于c++ - 如何使用指针为矩阵编写单循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com