Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection, Unix filter tool style C arrays, C pointers
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 2 redirection $ kopieer lezen van toetsenbord schrijven naar beeldscherm $ kopieer <a.txt lezen uit de file a.txt en schrijven naar beeldscherm $ kopieer > b.txt lezen van toetsenbord en schrijven naar de file b.txt $ kopieer b.txt lezen uit de file a.txt en schrijven naar de file b.txt $ copieer b.txt lezen, via tussenstap wegschrijven
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 3 Unix command-line style tools doe 1 ding, doe dat goed werk als filter niet interactief handig voor de ‘programmeur’ minder handig voor de ‘eindgebruiker’ wc : word count sort : sorteer unique : remove duplicates
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 4 GUI-style tools doe veel met 1 tool interactief, GUI handig voor de ‘eindgebruiker’ minder handig voor de ‘programmeur’ vaak geen command line IE / Netscape (print...)
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 5 C arrays, C pointers een char array is een verzameling (0..n) characters behalve bij het definieren wordt de lengte *niet* genoemd! een array wordt geindexeerd: a[ i ] een int pointer wijst naar een verzameling (0..n) ints naar hoeveel wordt nergens genoemd! een pointer wordt gedereferenced: *a met een pointer kan je rekenen, de ‘teleenheid’ is de omvang van het basistype (bv int)
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 6 C arrays, C pointers gebruik van een array char a[ 10 ]; for( i = 0; i < 10; i++ ){ a[ i ] = ’x’; } gebruik van een pointer char *p =...; for( i = 0; i < 10; i++ ){ *p = ’x’; p++; }
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 7 C pointers een pointer wijst uitzichzelf (nog) nergens naar int *p; *p = 15; /* geen idee waar de pointer heen wijst! */ een pointer kan wijzen naar een ‘gewone’ variabele int i; int *p = &i; *p = 15; /* OK */ p++; int *p = 15; /* fout! */
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 8 een array is een pointer? int a[ 100 ]; int *p; p = &a[ 0 ]; p = a; a = p; a[ 10 ] = 12; *( p + 10 ) = 12; *( a + 10 ) = 10; p[ 10 ] = 10; 1 regel is fout, de rest is goed!
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 9 drie mogelijke implementaties van strlen a) int strlen( char s[] ){ int i = 0; while (s[i] != ‘\0’) i++; return i; } b) int strlen( char *s ){ int i = 0; while( *( s + i ) != ‘\0’){ i++ } return i; } c) int strlen( char *s ){ int i = 0; while( *s != ‘\0’){ s++; i++ } return i; }
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 10 oefening: zoek de 2 fouten if( ! strcmp( s, ’Hello’ )){ printf( ’de string is: Hello\n’ ); }
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 11 oefening: zoek de 3 fouten char * add( char *a, char *b ){ char r[ 132 ]; char *p = r; while( *a != ‘\0’ ){ *p++ = *a++; } while( *b != ‘\0’ ){ *p++ = *b++; } return r; }
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 12 Opdracht: ’strncpy’ Schrijf een implementatie van de string functie char *strncpy( char *dest, char *src, size_t n ); op de a) (=array) en c) (=pointer) manieren.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 13 Werk voor volgende week Lees 5.1, 5.2, 5.3 Maak de opdracht