我有2層矩陣結構意味着等於數據但具有不同的形式這樣的:如果C結構只是另一個結構類型,如果他們的內存大小相等?
// Matrix type 1.
typedef float Scalar;
typedef struct { Scalar e[4]; } Vector;
typedef struct { Vector e[4]; } Matrix;
// Matrix type 2 (you may know this if you're iPhone developer)
// Defines CGFloat as float for simple description.
typedef float CGFloat;
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
他們的存儲器大小是相等的。因此,我相信有一種方法來轉換這些類型沒有任何指針操作或複製這樣的:
// Implemented in external lib.
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
Matrix m = (Matrix)CATransform3DMakeScale (1, 2, 3);
這可能嗎?目前編譯器打印出「錯誤:轉換爲非標量類型請求」消息。
輝煌。但在我看來,它需要一種代理變量。它不會導致一些複製? – Eonil 2010-05-02 09:41:00
否 - 僅將聯合定義爲typedef - 參見上面的示例。 – 2010-05-02 09:44:28
工會是最好的主意。大多數類型安全,最簡單的轉換,沒有開銷。 – Puppy 2010-05-02 14:26:30