• [^] # Re: sans tricher

    Posté par . En réponse au journal Perles de C. Évalué à 3.

    Si je ne dit pas de bêtises, en C, les paramètres des fonctions n'ont pas besoin d'être déclarés dans les pointeurs sur les fonctions.

    C'est en effet possible avec une liste de paramètres vides '()' mais ici le '(void)' implique une fonction sans aucuns paramètres.

    *d[2] = {&a} : tableau d (2 éléments) de pointeurs int initialisés avec l'adresse a qui est indéfinie à ce stade.

    Le premier élément de d est effectivement initialisé avec l'adresse de a mais le second est initialisé à 0.

    elle est indéfinie mais représente la première variable locale si on est dans le corps d'une fonction. Du coup indirectement on peut modifier la valeur du pointeur "b" qui est déclaré constant par exemple comme cela

    En fait, non. Le compilateur n'a aucune obligation de conserver l'ordre des variables locales ou globales. Pour les variables locales (ou static), il n'est même pas obligé de leur affecter une adresse sauf si cette adresse est utilisée dans le code (par exemple avec &b). En pratique, la variable b peut très bien exister dans un registre ou ne pas exister du tout. Pour les variables globales, la situation est encore plus complexe car les elles sont typiquement rangées dans des zone mémoires différentes en fonction de leur nature (read-only, read-write, initialisé avec des 0, ...). Le compilateur peut aussi décider de réordonner les variables pour diverses raisons (alignements, tailles, optimisations, ...)