我有兩個對象都同一類型的,例如:如何使用memcpy交換兩個對象的部分?
typedef struct s_Object
{
signed int a[3];
double float b;
unsigned short int c[30];
struct s_Object *next,
*prev;
} t_Object;
t_Object A, B;
我需要一個像一些通用的功能:
swap_vars(&A, &B);
將不會掉球,但所有其他數據的對象可以包含。在C中可能嗎?
假設指針放置在最高地址,我的第一個想法是:
void swap_vars(t_Object *pA, t_Object *pB){
t_Object C;
memcpy(&C, pA, sizeof(t_Object)-sizeof(t_Object *)*2;
memcpy(pA, pB, sizeof(t_Object)-sizeof(t_Object *)*2;
memcpy(pB, &C, sizeof(t_Object)-sizeof(t_Object *)*2;
}
,但我不知道是怎麼便攜式它(或者錯誤的話)?
我正在尋找最便攜的解決方案。
你不應該假設任何關於結構的佈局,只是使用他們的名字memcopy個別成員 – 2011-03-23 13:46:38
@Martin:這不是一個漂亮的解決方案,因爲每次我將改變對象的類型描述,我必須更新這個函數以及。 – psihodelia 2011-03-23 13:50:51