Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:tutoriale:good_practices [2022/01/24 16:27]
stefan.popa99 [Tips & tricks]
programare:tutoriale:good_practices [2022/01/24 16:28] (current)
stefan.popa99 [Tips & tricks]
Line 474: Line 474:
   * un mecanism de interschimbare a două valori de orice tip;   * un mecanism de interschimbare a două valori de orice tip;
  
-Pentru a interschimba două valori de orice tip, ar trebui să ne gândim ce înseamnă a interschimba un element ''​%%v[i]%%''​ cu un alt element ''​%%v[j]%%''?​ Cum v este de tipul ''​%%void*%%'',​ nu este permis să folosim ''​%%v[i]%%'',​deoarece printr-un pointer ''​%%void*%%''​ nu știm ce elemente avem. Însă, cunoaștem dimensiunea unui ''​%%singur%%''​ element din vector - ''​%%elem_size%%'',​ putem determina adresa de început al celui de-al i-lea element din vector, care va fi la ''​%%v + i * elem_size%%''​ . Pentru a interschimba valorile, vom copia cu funcția ''​%%memcpy%%''​ un număr de''​%%elem_size%%''​ bytes de la adresa determinată pentru elementul ''​%%i%%''​ într-un buffer temporar (similar cu ''​%%temp = v[i];​%%''​),​ apoi copiem de la adresa corespunzătoare lui ''​%%j%%''​ la cea a lui ''​%%i%%''​ (similar cu ''​%%v[i] = v[j];​%%'',​ apoi din bufferul temporar la adresa corespunzătoare lui j (similar cu ''​%%v[j] = tmp;​%%''​).+Pentru a interschimba două valori de orice tip, ar trebui să ne gândim ce înseamnă a interschimba un element ''​%%v[i]%%''​ cu un alt element ''​%%v[j]%%''?​ Cum v este de tipul ''​%%void*%%'',​ nu este permis să folosim ''​%%v[i]%%'',​deoarece printr-un pointer ''​%%void*%%''​ nu știm ce elemente avem. Însă, cunoaștem dimensiunea unui ''​%%singur%%''​ element din vector - ''​%%elem_size%%'',​ putem determina adresa de început al celui de-al i-lea element din vector, care va fi la ''​%%v + i * elem_size%%''​ . Pentru a interschimba valorile, vom copia cu funcția ''​%%memcpy%%''​ un număr de ''​%%elem_size%%''​ bytes de la adresa determinată pentru elementul ''​%%i%%''​ într-un buffer temporar (similar cu ''​%%temp = v[i];​%%''​),​ apoi copiem de la adresa corespunzătoare lui ''​%%j%%''​ la cea a lui ''​%%i%%''​ (similar cu ''​%%v[i] = v[j];​%%'',​ apoi din bufferul temporar la adresa corespunzătoare lui j (similar cu ''​%%v[j] = tmp;​%%''​).
  
 O posibilă implementare a funcției este următoarea:​ O posibilă implementare a funcției este următoarea:​
programare/tutoriale/good_practices.txt · Last modified: 2022/01/24 16:28 by stefan.popa99
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0