tengo 2 estructuras de matriz significa datos iguales pero tienen forma diferente como los siguientes:¿Cómo convertir C struct a otro tipo de estructura si el tamaño de su memoria es el mismo?
// 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;
Sus tamaños de memoria son iguales. Así que yo creo que es una forma de convertir estos tipos sin ningún tipo de operaciones de puntero o copiar la siguiente manera:
// Implemented in external lib.
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
Matrix m = (Matrix)CATransform3DMakeScale (1, 2, 3);
Es esto posible? Actualmente el compilador imprime un mensaje de "error: conversión a tipo no escalar solicitado".
Brillante. Pero en mi opinión, requiere un tipo de variable proxy. ¿No causa algo de copia? – Eonil
No, simplemente defina una unión como typedef - vea el ejemplo anterior. –
La unión es la mejor idea. La mayoría de las conversiones de tipo seguro, más simple, sin gastos generales. – Puppy