說,如果我有兩個結構類型:我該如何做這樣的結構類型轉換?
typedef struct
{
unsigned int * a;
char * b;
char * c;
}TYPEA;
typedef struct
{
unsigned int * a;
unsigned int * b;
}TYPEB;
我也有一個指針數組,它包含指針指向TYPEA
類型:
TYPEA* AArray[1] =
{
&ga,
};
ga
定義爲:
TYPEA ga =
{
&num1,
&b,
&c,
};
如果我定義了另一個TYPEA
var,我可以修改AArray[0]
的內容T的值,就像這樣:
TYPEA another_ga =
{
&num3,
&b,
&c,
};
void change_AArray()
{
*AArray[0] = another_ga;
}
這工作完全好,但問題是,作爲TYPEA
和TYPEB
的第32位相同(均爲unsigned int
),纔有可能爲我改變AArray
的ga
「 s的內容到TYPEB
結構?
這裏是我的嘗試:
void change_AArray()
{
/* *AArray[0] = another_ga; */
/* Compile Error */
/* *AArray[0] = gb; */
/* Compile Error */
/* *AArray[0] = (TYPEA)gb; */
/* Passed compile, but AArray[0] is not changed */
/* AArray[0] = (TYPEA*)&gb; */
}
然後我試圖添加另一個指針,並把它放在AArray[0]
而不是使用&ga
,但它不能通過編譯階段,我認爲C是需要在一個恆定初始化列表。
TYPEA * pga = &ga;
TYPEA* AArray[1] =
{
pga, // error, needs a constant expression.
};
void change_AArray()
{
AArray[0] = (TYPEA*)&gb;
}
是否可以進行類型轉換?
整個代碼:
#include <stdio.h>
typedef struct
{
unsigned int * a;
char * b;
char * c;
}TYPEA;
typedef struct
{
unsigned int * a;
unsigned int * b;
}TYPEB;
int num1 = 10, num2 = 20, num3 = 30;
char b = 'b', c = 'c';
TYPEA ga =
{
&num1,
&b,
&c,
};
TYPEA another_ga =
{
&num3,
&b,
&c,
};
TYPEB gb =
{
&num2,
&num3,
};
TYPEA* AArray[1] =
{
&ga,
};
void change_AArray()
{
*AArray[0] = another_ga;
/* How can I do this conversion? */
/* *AArray[0] = gb; */
}
int main(int argc, const char *argv[])
{
printf("ga.a: %d\n", *ga.a);
printf("gb.b: %d\n", *gb.a);
change_AArray();
printf("After calling change_AArray()\n");
printf("ga.a: %d\n", *ga.a);
printf("gb.b: %d\n", *gb.a);
return 0;
}
C++確實允許在結構之間進行轉換,但是您必須定義一個函數來指定轉換完成的方式。沒有默認行爲。 –