以下代码令我惊讶地编写。你能解释一下它是如何工作的吗?我最不了解的一点是,铸造的c阵列如何与班级成员完全匹配。
#include <iostream>
class ClassA
{
public:
float ArbitraryVariableName1;
float ArbitraryVariableName2;
float ArbitraryVariableName3;
float ArbitraryVariableName4;
float ArbitraryVariableName5;
float ArbitraryVariableName6;
float ArbitraryVariableName7;
float ArbitraryVariableName8;
float ArbitraryVariableName9;
};
typedef float Float3[3];
typedef Float3 * Matrix;
int wmain(int argc, wchar_t * argv[])
{
ClassA md;
Matrix mat = (Matrix) & md;
// Matrix mat = reinterpret_cast<Matrix>(&md); // This one also works.
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
mat[i][j] = (i + 1) * (j + 1);
}
}
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 3; i++)
{
std::cout << mat[i][j] << '\t';
}
std::cout << std::endl;;
}
system("timeout 60");
return 0;
}
输出:
1 2 3
2 4 6
3 6 9
答案 0 :(得分:0)
因为你的9个浮点类和9个浮点数的数组平均存储在内存中:
1111 2222 3333 4444 5555 6666 7777 8888 9999
因此,当您将类转换为数组时,它可以正常工作。但是如果不使用不同大小的对象,则可能会出现分段错误。