는 동일한 데이터를 의미하지만, 이런 다른 형태 가지고캐스팅 방법 C의 메모리 크기가 같으면 C struct를 다른 struct 유형으로 그냥 씁니까? I 2 매트릭스 구조체가
// 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
아니요 - 공용체를 typedef로 정의하십시오. 위의 예를 참조하십시오. –
노조가 가장 좋습니다. 가장 안전하고 간단한 변환으로 오버 헤드가 없습니다. – Puppy