sourceInfo = &((SourceInstance*)sgInstanceTable.itemTable[index])->sourceInfo;
Tu es confronté à plusieurs notions:
- les tableaux avec [] (mais ca ne te pose pas de probleme ici)
- les pointeurs avec "&" et "*"
- les structures, avec "."
- les pointeurs de structures, reconnaissables à l'emploi de "->"
Ici, SourceInstance est un type (que je devine être une structure)
J'imagine que le type SourceInfo est celui du champ sourceInfo des structures SourceInstance.
Supposons que la variable si soit un SourceInstance.
Alors "si.sourceInfo" est un SourceInfo (celui contenu dans si)
SourceInstance* est un pointeur sur un SourceInstance
&si est une valeur de ce type.
sgInstanceTable.itemTable[index] est d'un type arbitraire (celui d'un élément du tableau nommé itemTable, contenu dans la structure sgInstanceTable
(SourceInstance*)sgInstanceTable.itemTable[index] est cette même valeur, lu comme un SourceInstance* (on dit "convertie en", ou "casté en"
).
Les règles de priorité disent en effet que la conversion intervient après l'accès par . et par []
p->m est l'opérateur "accès au membre m de la structure pointée par p:
Les priorités sont aussi telles que l'adressage (&a) est moins prioritaire que ->, donc &a->b est en réalité &(a->b) c'est à dire l'adresse du membre b de la structure pointée par a.
Dans ton cas, on a donc, après parenthésage complet:
1 2 3 4 5 6 7 8
| sourceInfo =
&(
(
(SourceInstance*) (sgInstanceTable.itemTable[index])
)
->
sourceInfo
); |
J'en déduis que le type de sourceInfo est (const?) SourceInfo* (ou void*, peut-être, mais il manquerait une conversion)
Partager