1 / 18

Pointere, referencer, struct’s mv.

Pointere, referencer, struct’s mv. Erklæringer. Eksempel på erklæringer int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til en integer, en funktion, der returnerer en integer en pointer til en funktion der returnerer en integer. Erklæringer.

Download Presentation

Pointere, referencer, struct’s mv.

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. Pointere, referencer, struct’s mv.

  2. Erklæringer Eksempel på erklæringer • int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til en integer, en funktion, der returnerer en integer en pointer til en funktion der returnerer en integer

  3. Erklæringer static: variablen deallokeres ikke når funktionen forlades extern: funktionen eller variablen er erklæret i et andet program C-strenge ender med et ’\0’ tegn C-strenge printes med et %s i printf

  4. SWAP Call by reference void swap(int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; } kaldes swap (&a, &b);

  5. SWAP Call by value void swap(int x, int y) { /* virker ikke */ int temp; temp = x; x = y; y = temp; }

  6. Pointere http://www.lysator.liu.se/c/bwk-tutor.html#pointers char *y; char x[100]; y is of type pointer to character (although it doesn't yet point anywhere).  We can make y point to an element of x by either of y = &x[0]; y = x; Since x is the address of x[0] this is legal and consistent. Now `*y' gives x[0].  More importantly, *(y+1) gives x[1] *(y+i) gives x[i] and the sequence y = &x[0]; y++; leaves y pointing at x[1].

  7. Finde længden på et char array Uden pointere: length(char s[ ]) { int n; for( n=0; s[n] != '\0'; ) n++; return(n); }

  8. Finde længden på et char array Med pointere length(char *s) { int n; for( n=0; *s != '\0'; s++ ) n++; return(n); }

  9. Sammenligning af strenge Returnerer 0 hvis strengene er ens ellers returneres > 0 int strcompare(char *s, char *t, int lng) { while(*t++ == *s++ && lng-- > 0); return lng; }

  10. Visning af argumenter fra kommandolinjen int main(int argc, char *argv[]) { int i; char *arg1; char arg2[30]; for (i = 0; i < argc; i++) { printf("argument %d = %s\n", i, argv[i]); arg1 = argv[i]; printf("argument %d = %s\n", i, arg1); strcpy(arg2, argv[i]); printf("argument %d = %s\n", i, arg2); } }

  11. argc argv prog [-abc] arg1 arg2 main(int argc; char **argv) { int aflag = bflag = cflag = 0; if( argc > 1 && argv[1][0] == '-' ) { for( i=1; (c=argv[1][i]) != '\0'; i++ ) if( c=='a' ) aflag++; else if( c=='b' ) bflag++; else if( c=='c' ) cflag++; else printf("%c?\n", c); --argc; ++argv; }

  12. Malloc og free Allokering af lager #include <stdlib.h> void *malloc(size_t size); Frigivelse af lager #include <stdlib.h> void free(void *ptr);

  13. Struct (1) I c har man mulighed for at samle data i en struktur struct point { int x; int y; } // definere en struct, men erklærer intet struct point pt1, pt2; // erklærer to struct af typen point

  14. Struct (2) struct { char navn[20]; int alder; } p1, p2; //definerer og erklærer p1 og p2 Der refereres til de enkelte medlem som følger: strukturnavn.medlem struct person p3 ={”Ole”, 5}; // erklærer og initierer

  15. Struct (3) struct’s kan bruges som alle andre variable inclusiv i arrays Størrelse af en struktur sizeof p1 // sizeof element sizeof(person) // sizeof(typenavn)

  16. Struct (4) Pointere til strukturer struct person *p3; // erklæring af en pointer til person strukturen Reference til et medlem (*p3).alder eller p3->alder. *p3.alder = *(p3.alder) og dette er ikke legalt da alder ikke er en pointer. *(p3->navn) er 1. tegn i navn

  17. Typedef (1) typedef int Length // Length er synonym for int typedef char* String // String er synonym for char* Length bredde; // det samme som int bredde; String p; // det samme som char* p;

  18. Typedef (2) typedef struct tnode *Treeprt; typedef struct tnode { int vaerdi; Treeprt left; Treeprt right; } Treenode; int main() { Treenode t; Treeprt head; }

More Related