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);
Если я работаю над кодом, я получаю вывод, как показано ниже.Тип литой адрес в C
Actual PIA addres from PIA offset = 300051c modid: 1 and pPIA: 300051d
pMod PIA= 300061c and POA= 3007020
Мой вопрос есть.
- Когда мы делаем тип касты типа (CM_IOM_PIA *) выше, почему мы видим значение 300061c вместо 300051d?
- Почему нет изменения адреса, если мы делаем typecast в (IOM_FIXED_PIA *) после ввода типа (CM_IOM_PIA *)?
- В общем, если у нас есть листинг, у нас есть изменение адреса?
Правильно ли это утверждение: 'typedef char CM_IOM_PIA [IOM_PIA_SIZE];'. Я имею в виду, может ли one'typedef' 'char' type использовать тип массива? –
@nishant: Да, это так. Это определяет 'CM_IOM_PIA' как синоним массива' char' длины 'IOM_PIA_SIZE'. –
Возможно, вам понравится читать указатель arithmetic. – alk