请问以下代码里,怎么知道x 和 xx 的值?因为等号左边的strb的成员没有初始化呀?
已知条件:
class classA{
public:
unionA UA; func1(); func2();
...}
typedef union {
structA strA; structB strB;
...}unionA;
typedef struct {
char cA; int iA;
...}structA;
typedef struct {
char cB; int iB;
...}structB;
在函数中:
MAIN()
{ classA A;
A.func1(); A.func2();//2个函数对A.UA.STRA.cA 和 iA进行了初始化
char x = A.UA.strB.cB;//???
int xx = A.UA.strB.iB;//???
我想问的是最后2句等号左边的值是多少?代码中从来没有进行过处理,怎么能附值给X和XX呢?谢谢!
问题点数:30、回复次数:3Top
1 楼kvls(冰茶)回复于 2004-08-04 16:56:08 得分 15
A.UA.strB.cB = A.UA.strA.cA
A.UA.strB.iB = A.UA.strA.iA
因为这是一个联合,A和B是同样的内存Top
2 楼huhaha7171(虎虎)回复于 2004-08-04 17:33:57 得分 0
kvls(冰茶):我还是不能理解,可能上面的例子给你错误的印象。
strB为:
typedef struct {
BYTE SRB_Cmd; // ASPI command code = SC_HA_INQUIRY
BYTE SRB_Status; // ASPI command status byte
BYTE SRB_HaId; // ASPI host adapter number
BYTE SRB_Flags; // ASPI request flags
DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0
BYTE HA_Count; // Number of host adapters present
BYTE HA_SCSI_ID; // SCSI ID of host adapter
BYTE HA_ManagerId[16]; // String describing the manager
BYTE HA_Identifier[16]; // String describing the host adapter
BYTE HA_Unique[16]; // Host Adapter Unique parameters
WORD HA_Rsvd1;
} SRB_HAInquiry, *PSRB_HAInquiry;
strA为:
typedef struct {
BYTE SRB_Cmd; //ASPI command code = SC_EXEC_SCSI_CMD
BYTE SRB_Status; // ASPI command status byte
BYTE SRB_HaId; // ASPI host adapter number
BYTE SRB_Flags; // ASPI request flags
DWORD SRB_Hdr_Rsvd; // Reserved
BYTE SRB_Target; // Target's SCSI ID
BYTE SRB_Lun; // Target's LUN number
WORD SRB_Rsvd1; // Reserved for Alignment
DWORD SRB_BufLen; // Data Allocation Length
BYTE *SRB_BufPointer; // Data Buffer Pointer
BYTE SRB_SenseLen; // Sense Allocation Length
BYTE SRB_CDBLen; // CDB Length
BYTE SRB_HaStat; // Host Adapter Status
BYTE SRB_TargStat; // Target Status
void *SRB_PostProc; // Post routine
void *SRB_Rsvd2; // Reserved
BYTE SRB_Rsvd3[16]; // Reserved for alignment
BYTE SRB_CDBByte[16]; // SCSI CDB
BYTE SRB_SenseArea[SENSE_LEN+2];// Request Sense buffer
} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
经过调用A.func1(); A.func2();2个函数 ,对strA的 BYTE SRB_Cmd,BYTE SRB_HaId,BYTE SRB_Flags,BYTE SRB_SenseLen,BYTE SRB_SenseLen进行了附值,
而后面用到的是strB的 BYTE HA_SCSI_ID, BYTE HA_Unique[16]中的(HA_Unique[3])。
联合的成员共用内存,但是位置也对不上。请帮忙看看,谢谢了!Top
3 楼whyglinux(山青水秀)回复于 2004-08-19 15:44:35 得分 15
联合成员,共享内存!
(使我想起了对洪教主的赞扬:“仙福永享,寿与天齐”。没记错吧?)Top




