1 / 17

Typdeklarationer

Typdeklarationer. Används för att ge beskrivande namn för en typ typedef typ typnamn; typedef unsigned int PosInt; ... PosInt slumpTal;. exempel. ... typedef double ** MatrisTyp; void skrivMatris(MatrisTyp matris,int m,int n); void main(void) { MatrisTyp a; int i,j;

renee
Download Presentation

Typdeklarationer

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. Typdeklarationer Används för att ge beskrivande namn för en typ typedeftyptypnamn; typedef unsigned int PosInt; ... PosInt slumpTal; Programmeringsteknik, 4p vt-00

  2. exempel ... typedef double ** MatrisTyp; void skrivMatris(MatrisTyp matris,int m,int n); void main(void) { MatrisTyp a; int i,j; a = calloc(4,sizeof(double *)); for (i=0;i<4;i++) a[i] = calloc(3,sizeof(double)); srand(time(NULL)); /* slumptalsfrö */ for (i=0;i<4;i++) for (j=0;j<3;j++) a[i][j] = rand()%100 - 50.0; skrivMatris(a,4,3); }/* main */ ... Prototyp Programmeringsteknik, 4p vt-00

  3. Datastrukturer • Ofta bra att kunna föra ihop information av olika datatyper till en enhet. • Ett exempel : du vill organisera dina (många) böcker • En bok kan t.ex. beskrivas av • Titel • Författare • Utgivingsår • Om den är utlånad, i så fall till vem • … Programmeringsteknik, 4p vt-00

  4. Ny datastruktur i C- struct struct tagnamn { medlemmar }; • Nu kan variabler deklareras med struct tagnamn var1,var2,var3; • tagnamn kan utelämnas men då måste alla variabler deklareras mellan } och ; och inga ytterligare dekl. kan göras Programmeringsteknik, 4p vt-00

  5. Bok struct Bok { char *titel; int utgivningsAr; char *forfattare; }; • struct Bok är nu en typbeskrivning och kan anv. för att deklarera variabler struct Bok b; Programmeringsteknik, 4p vt-00

  6. Bok - utan tag struct { char *titel; int utgivningsAr; char *forfattare; }b1,b2,b3; • b1, b2 och b3 variabler av denna typ • Inga ytterligare variabler kan deklareras • Omöjligt att anv. för parameteröverföring Programmeringsteknik, 4p vt-00

  7. Skapa en ny datatyp • Namnge den nya datastrukturen med typedef typedeftyptypnamn; • Utan tagnamn : hela typdef. in mellan typedef och typnamn typedef struct { char *titel; int utgivningsAr; char *forfattare; } Bok; • Med tagnamn : typedef struct Bok Bok • Bok är nu typnamn och kan anv. för att deklarera variabler Bok b; Tags är inte vanliga identifierare Programmeringsteknik, 4p vt-00

  8. Medlemmarna • För att nå ett enskilt värde i en struct så använder man punkt-operatornstructvariabel.medlem • Medlemmen hanteras precis som en enkel variabel av samma typ som medlemmen b.titel = "Bilbo - en hobbits äventyr"; b.forfattare = "J.J.R. Tolkien"; b.utgivningsAr = 1935; • Medlemsidentifierarna måste vara unika inom structen • Structar kopieras medlem för medlem (även fält)Bok b,annanBok;/* b får värden enligt ovan */ annanBok = b; /* all information kopieras */ Programmeringsteknik, 4p vt-00

  9. exempel Bok #include <stdio.h> typedef struct { char *titel; int utgivningsAr; char *forfattare; } Bok; int main(void) { Bok b; b.titel = malloc(25*sizeof(char)); b.forfattare = malloc(25*sizeof(char)); b.titel = "Bilbo - en hobbits äventyr"; b.forfattare = "J.J.R. Tolkien"; b.utgivningsAr= 1935; printf("Titel : %s \n",b.titel); printf("Författare : %s \n",b.forfattare); printf("Antal sidor : %d\n",b.utgivningsAr); return 0; }/* main */ Programmeringsteknik, 4p vt-00

  10. körning Titel : Bilbo - en hobbits äventyr Författare : J.J.R. Tolkien Utgivningsår : 1935 Programmeringsteknik, 4p vt-00

  11. Pekare & structar • Flera skäl till att välja att använda pekare till ett värde (parameteröverföring pass-by-reference, dynamisk minnesallokering). Fungerar bra även med struct • Punktoperatorn får bara användas på en struct, inte på en pekare till en struct • *p är den struct som p pekar på • I Bok-exemplet int main(void) { Bok *p; (*p).titel = malloc(25*sizeof(char)); (*p).forfattare = malloc(25*sizeof(char)); Programmeringsteknik, 4p vt-00

  12. -> - operatorn • I stället för punkt-operatorn kan man nu använda structpekarvariabel->medlem • Detta ger ett lite enklare skrivsätt för pekare till structar typedef struct { char *titel; int utgivningsAr; char *forfattare; } Bok; int main(void) { Bok *p; p->titel = malloc(25*sizeof(char)); p->forfattare = malloc(25*sizeof(char)); Programmeringsteknik, 4p vt-00

  13. exempel BokPek #include <stdio.h> typedef struct { char *titel; int utgivningsAr; char *forfattare; } Bok; int main(void) { Bok *b; (*b).titel = malloc(25*sizeof(char)); (*b).forfattare = malloc(25*sizeof(char)); (*b).titel = "Bilbo - en hobbits äventyr"; (*b).forfattare = "J.J.R. Tolkien"; (*b).utgivningsAr= 1935; printf("Titel : %s \n",(*b).titel); printf("Författare : %s \n",(*b).forfattare); printf("Antal sidor : %d\n",(*b).utgivningsAr); return 0; }/* main */ Programmeringsteknik, 4p vt-00

  14. exempel BokLista #include <stdio.h> #include <stdlib.h> typedef struct { char *titel; int antSidor; char *forfattare; } Bok; int main(void) { Bok *lista; int i; int n = 3; lista = calloc(25,sizeof(Bok)); for (i=0; i <= n-1;i++) { lista[i].titel = calloc(25,sizeof(char)); lista[i].forfattare = calloc(25,sizeof(char)); } Programmeringsteknik, 4p vt-00

  15. ... BokLista for (i=0; i <= n-1;i++) { printf("Titel[%d] : ",i); gets(lista[i].titel); printf("Författare : "); gets(lista[i].forfattare); printf("Utgivningsår : "); scanf("%d",&lista[i].utgivningsAr); getchar(); } skrivBibliotek(lista,n); Programmeringsteknik, 4p vt-00

  16. ... skrivBibliotek void skrivBibliotek(Bok *bib, int antal) { int i; for (i=0; i <= antal-1;i++) { printf("Bok #%d\n",i); printf("Titel : %s\n",bib[i].titel); printf("Författare : %s\n",bib[i].forfattare); printf("Utgivningsår : %d\n\n",bib[i].utgivningsAr); } }/* skrivBibliotek */ Programmeringsteknik, 4p vt-00

  17. körning Titel[0] : Emil i Lönneberga Författare : Astrid lindgren Utgivningsår : 1967 Titel[1] : A book on C Författare : Kelley, Pohl Utgivningsår : 1998 Titel[2] : Telefonkatalogen Författare : Telia Utgivningsår : 1999 Bok #0 Titel : Emil i Lönneberga Författare : Astrid Lindgren Utgivningsår : 1967 Bok #1 Titel : A Book on C Författare : Kelley,Pohl Utgivningsår : 1998 Bok #2 Titel : Telefonkatalogen Författare : Telia Utgivningsår : 1999 Programmeringsteknik, 4p vt-00

More Related