1 / 9

Funktion som byter plats på två variabler

Funktion som byter plats på två variabler.

Download Presentation

Funktion som byter plats på två variabler

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function *//* from Stephen Prata, C Primer Plus ISBN 1-571969-161-8 */ #include <stdio.h>void interchange(int u, int v);int main(void){ int x = 5, y = 10; printf("Orginally x = %d and y = %d\n", x, y); interchange(x, y); printf("Now x = %d and y = %d\n", x, y); system("PAUSE"); return 0;}void interchange(int u, int v){ int temp; temp = u; u = v; v = temp;} William Sandqvist william@kth.se

  2. Funktionen fungerar ej Funktionen void interchange( int u, int v) får ju bara kopior av x och y och kan därför inte påverka orginalen talen x och y i main. För att byta plats på två tal krävs två returvärden, och C-funktioner har som mest ett returvärde. William Sandqvist william@kth.se

  3. pekare * adress & och avreferering * 18 18 18 19 int b; Deklaration av heltalsvariabeln b. Plats reserveras. b = 18; Definition av variabeln b. Nu innehåller den talet 18. &b Adressoperatorn. Adressen till variabeln b. int * c; Deklaration av int-pekarvariabeln c. c = &b; Nu pekar c på b. *c Avrefereringsoperatorn. Det som c pekar på. *c = 19; Talet 19 lagras på den plats som c pekar ut. Nu innehåller b = 19. ( ) ( ) ( ) Mer om detta senare i kursen, men det behövs redan nu … William Sandqvist william@kth.se

  4. Funktion som byter plats på två variabler /* swap3.c pointers to make a swapping function work *//* from Stephen Prata, C Primer Plus ISBN 1-571969-161-8 */#include <stdio.h>void interchange(int *, int *);int main(void){int x = 5, y = 10; printf("Orginally x = %d and y = %d\n", x, y); interchange(&x, &y); printf("Now x = %d and y = %d\n", x, y); system("PAUSE"); return 0;}void interchange(int * u, int * v){ int temp; temp = *u; *u =*v; *v = temp;} William Sandqvist william@kth.se

  5. Nu fungerar det! Funktionens parametrar, u och v är nu ”kopior” av adresserna till variablerna x och y (&x, &y). Med hjälp av de medskickade adresserna kan funktionen returnera värden till x och y. temp = *u; *u = *v; *v = temp; Förutom en C-funktions returvärde kan funktionen även ge retur till adresser som angivits i parameterlistan! William Sandqvist william@kth.se

  6. ( Kan man klara sig utan mellanvariabeln? ) XOR får Du lära dig nästa gång! … Cliff-hanger! William Sandqvist william@kth.se

  7. ( utan mellanvariabel ) XOR swap algorithm void interchange(int * u, int * v){ *u ^= *v; *v ^= *u; *u ^= *v;} ? Nördvarning! William Sandqvist william@kth.se

  8. ( Funktion som byter på två variabler ) /* swap4.c pointers to make a swapping function work *//* from Stephen Prata, C Primer Plus ISBN 1-571969-161-8 */#include <stdio.h>void interchange(int *, int *);int main(void){int x = 5, y = 10; printf("Orginally x = %d and y = %d\n", x, y); interchange(&x, &y); printf("Now x = %d and y = %d\n", x, y); system("PAUSE"); return 0;}void interchange(int * u, int * v){ *u ^= *v; *v ^= *u; *u ^= *v;} William Sandqvist william@kth.se

  9. ( Mind swap? ) Hur löser Hollywood-filmerna egentligen mellanlagringen av medvetandet …. XOR-swap? Var mellanlagrar man medvetandet? William Sandqvist william@kth.se

More Related