C 正在覆盖的联合中的数据
我目前正在努力解决这个问题。我有一个union,它有一个成员结构+变量,成员结构也包含一个成员结构+变量,这个成员结构包含变量 我发现,当试图为特定变量赋值时,我最终会覆盖以前分配的一些数据。我有一种很好的感觉,这是由于指针没有增加。下面是一些示例代码:C 正在覆盖的联合中的数据,c,pointers,struct,unions,C,Pointers,Struct,Unions,我目前正在努力解决这个问题。我有一个union,它有一个成员结构+变量,成员结构也包含一个成员结构+变量,这个成员结构包含变量 我发现,当试图为特定变量赋值时,我最终会覆盖以前分配的一些数据。我有一种很好的感觉,这是由于指针没有增加。下面是一些示例代码: struct Scale { char Scale_Name[5]; char notes[10]; }; struct Instrument { char Inst_Name[5]; struct Scale
struct Scale
{
char Scale_Name[5];
char notes[10];
};
struct Instrument
{
char Inst_Name[5];
struct Scale scales[5];
};
union Whole_Inst
{
char InstrumentCount;
struct Instrument Instruments[2];
};
union Whole_Inst Instrument1;
int main(void)
{
char i, j, k;
char TempArr[5] = {0x01, 0x02, 0x03, 0x04, 0x05};
char NUMBER_OF_INST = 1;
Instrument1.InstrumentCount = TempArr[0];
printf("InstCount = 0x%x\n", Instrument1.InstrumentCount);
for(j = 0; j < NUMBER_OF_INST; j++)
{
for(i = 0; i < 4; i++)
{
Instrument1.Instruments[0].Inst_Name[i] = TempArr[i+1];
printf("\nInstName[%d] = 0x%x", i,
Instrument1.Instruments[0].Inst_Name[i]);
}
}
printf("\n\nInstCount = 0x%x\n", i, Instrument1.InstrumentCount);
system("PAUSE");
return 0;
}
谁能给我指一下正确的方向吗
问候
David您的
union
允许您存储计数或仪器数组,但不能同时存储两者。这两段数据共享同一内存。如果你改变了一个,你就重写了另一个使用的内存
如果要同时存储计数和数组,则需要使用struct
而不是union
为什么要使用union?它不应该是一个结构吗?当您设置Instrument1.InstrumentCount
时,实际上是在覆盖仪器数据-联合成员映射到相同的内存空间,因此更改一个成员会更改所有联合成员。你用工会来做这件事是没有意义的。你知道工会是干什么用的吗?这正是它正在做的。我投票结束这个问题,因为C书急需。问这样的问题是一个耻辱,打开维基百科就足够了:在 C和C++中,未标记的工会几乎完全表达类似的结构(结构),除了**每个数据成员都在内存中的相同位置开始。** <代码>
InstCount = 0x1
InstName[0] = 0x2
InstName[1] = 0x3
InstName[2] = 0x4
InstName[3] = 0x5
InstCount = 0x4
Press any key to continue . . .