【发布时间】:2013-08-30 09:43:56
【问题描述】:
typedef struct iomFixedPIA
{
UINT16 state; /* State */
UINT16 modStatus;/* Module status*/
} IOM_FIXED_PIA;
#define IOM_PIA_SIZE 256 /* Size of PIA per IO module */
typedef char CM_IOM_PIA [IOM_PIA_SIZE]; /* PIA for one module */
printf("Actual PIA address from PIA offset = %x modid: %d and pPIA: %x \n",
CI856_CM_ADRS(CI856_PIA_OFFSET), pParMsg->modId,
((CI856_CM_ADRS(CI856_PIA_OFFSET)) + pParMsg->modId) );
pMod->pPIA = (IOM_FIXED_PIA *)
((CM_IOM_PIA *) (CI856_CM_ADRS(CI856_PIA_OFFSET)) + pParMsg->modId);
// question here ^^
printf(" pMod PIA= %x \n", pMod->pPIA);
如果我运行上面的代码,我会得到如下输出。
Actual PIA addres from PIA offset = 300051c modid: 1 and pPIA: 300051d
pMod PIA= 300061c and POA= 3007020
我的问题是。
- 当我们在上面输入 caste to type (CM_IOM_PIA *) 时,为什么我们看到的值是 300061c 而不是 300051d?
- 为什么我们在类型转换 (CM_IOM_PIA *) 之后再对 (IOM_FIXED_PIA *) 进行类型转换,地址没有变化?
- 一般来说,如果我们进行类型转换,地址是否会发生变化?
【问题讨论】:
-
这个说法正确吗:
typedef char CM_IOM_PIA [IOM_PIA_SIZE];。我的意思是可以 onetypedefchar输入数组类型吗? -
@nishant:是的。这将
CM_IOM_PIA定义为长度为IOM_PIA_SIZE的char数组的同义词。 -
您可能想了解指针算法。