argv et pointeur de type void
Bonjour,
Ma question porte sur l'argv du main(). Je suis toujours sur la compréhension d'un code qui utilise des arguments puis stocke une partie de ceux-ci dans une structure dont un élément est un pointeur de type void.
Les arguments sont des chaines des caractères.
A un moment dans le code on passe par un switch() pour valoriser le pointeur. Dans un cas on passe directement l'argurment, dans un autre cas on passe une adresse.
Pourquoi l'adresse n'est-elle pas specifiée dans le cas de l'argument ?
UCHAR -> unsigned char
ULONG -> unsigned long
PVOID -> pointeur de type void
La structure
Code:
1 2 3 4 5 6 7
|
struct HWMCA_DATATYPE_S {
UCHAR ucType;
ULONG ulLength;
PVOID pData;
struct HWMCA_DATATYPE_S *pNext;
}; |
La partie du code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
int main(int argc, char *argv[], char *envp[]) {
----
typedef struct HWMCA_DATATYPE_S HWMCA_DATATYPE_T;
HWMCA_DATATYPE_T aHwmcaDataType[10];
ULONG aulCmdData[10];
---
----
switch (aHwmcaDataType[j].ucType) {
case HWMCA_TYPE_OCTETSTRING:
aHwmcaDataType[j].ulLength = strlen(argv[i+1])+1;
aHwmcaDataType[j].pData = argv[i+1];
break;
case HWMCA_TYPE_NULL:
aHwmcaDataType[j].ulLength = 0;
aHwmcaDataType[j].pData = (PVOID)NULL;
break;
default:
aHwmcaDataType[j].ulLength = sizeof(ULONG);
aulCmdData[j] = atol(argv[i+1]);
aHwmcaDataType[j].pData = &aulCmdData[j];
break;
} /* endswitch */
--
---
return (0)
} |
En fait dans le switch pour le cas HWMCA_TYPE_OCTETSTRING on passe directement argv[i+1] à aHwmcaDataType[j].pData
alors que dans le cas default on passe l'adresse de aulCmdData[j] à aHwmcaDataType[j].pData
Pourquoi cette différence ?