说,如果我有两个结构类型:我该如何做这样的结构类型转换?
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++确实允许在结构之间进行转换,但是您必须定义一个函数来指定转换完成的方式。没有默认行为。 –