Presentation laddar. Vänta.

Presentation laddar. Vänta.

William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer.

Liknande presentationer


En presentation över ämnet: "William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer."— Presentationens avskrift:

1 William Sandqvist william@kth.se 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 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; }

2 William Sandqvist william@kth.se 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.

3 William Sandqvist william@kth.se pekare * adress & och avreferering * 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. 18 ( ) 18 ( ) 19 ( ) Mer om detta senare i kursen, men det behövs redan nu …

4 William Sandqvist william@kth.se 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 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; }

5 William Sandqvist william@kth.se 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!

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

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

8 William Sandqvist william@kth.se ( 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 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; }

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


Ladda ner ppt "William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer."

Liknande presentationer


Google-annonser