Comprendre la valeur pointue affectation C

voix
0

Bonjour / soir tout le monde,

Je voudrais effacer le pointeur concept suivant,

Dans ce prototype je passe la première valeur de copie de cette première donnée paramètre x dans l'ensemble, et la seconde je passer à travers la référence de sorte que je suis accéder directement à la cellule de mémoire pour changer de façon permanente.

Ce que je ne comprends pas (dans la fonction) est la façon dont la fonction gère les valeurs,

Je vais essayer d'être plus précis, je ne comprends pas combien ces missions sont « » cyclique « ».

Par exemple, cette fonction semble une sorte de fonction d'échange pour moi parce que prend x et qui est entier et attribuer à x la valeur pointée par y, qui est la valeur pointée à son tour par y + 1, et ainsi de suite.

Je voudrais donc savoir quand cette séquence de tâches commence et se termine, de comprendre pourquoi si je l'imprimer dans la principale ou dans la fonction qu'il printf toujours Si je ne me trompe pas {} 11,33,22,44

void Boh(int x,int *y)
{
    x = *y;
    *y = *(y+1);
    *(y+1) = x;
}

int main()
{
    int a[] = {11,22,33,44};
    Boh(a[0],&a[1]); \* (Point 1) *\
    return 0;
}
Créé 07/11/2018 à 20:20
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

La première chose à noter est que le paramètre xde la fonction est immédiatement écrasé avec la valeur *y. Donc , quelle que soit la valeur est donnée pour ce paramètre est sans rapport avec le résultat.

La fonction est swapping *yet en *(y + 1)utilisant xcomme temporaire. Parce que le paramètre ycorrespond à &a[1]dans main, c'est le premier endroit qui obtient échangé. Ensuite , si vous swap &a[1]pour yl'expression *(y + 1), vous obtenez *(&a[1]+ 1)== *((a + 1) + 1)= *(a + 2)= a[2]. Alors , a[1]et a[2]OBTIENNENT troqué, qu'il ce que vous verrez si vous imprimez le contenu du tableau après avoir appelé Boh.

Créé 07/11/2018 à 20:30
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more