2011-05-28 4 views
2

Doublons possibles:
C programming: is this undefined behavior?
Is this program having any sequence point issues ?pointeurs C et fonctions

Salut,

Je suis en cours d'exécution le programme suivant

void print(int *a, int *b, int *c, int *d, int *e) 
{ 

    printf("\n %d %d %d %d %d",*a,*b,*c,*d,*e); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    static int arr[] = {97,98,99,100,101,102,103,104}; 
    int *ptr=arr+1; 
    print(++ptr,ptr--,ptr,ptr++,++ptr); 
    getchar(); 
    return 0; 
} 

Je pensais que j'obtiendrais 99 99 98 98 100 en sortie mais j'obtiendrais 100 100 100 99 100 en sortie. Je ne comprends pas pourquoi. Les pointeurs se comportent-ils différemment de la variable normale lorsqu'ils sont utilisés avec des opérateurs ++ ou - (pré ou postfixes). Pouvez-vous s'il vous plaît m'aider à comprendre comment le programme fonctionne

+0

questions similaires précédemment posées sur SO ... –

Répondre

5

Vous lisez et modifiez ptr plusieurs fois sans un point de séquence. C'est un comportement indéfini. Le compilateur peut émettre n'importe quel code. Ne fais pas ça.

Veuillez noter également que l'ordre d'évaluation des arguments de fonction n'est pas défini, donc votre instruction print, même si elle était bien définie, ne produirait pas nécessairement ce que vous pensez qu'elle ferait.

Voir cette question Is this undefined behavior pour un problème similaire.

+0

Voir en particulier le point 4 dans http://en.wikipedia.org/wiki/Sequence_point. – mtrw