U3 3. Üung U3 3. Üung 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion Aufge 2 U3-1 einfche wp_doule Funktion Prmeter werden in C y-vlue üergeen die ufgerufene Funktion knn den ktuellen Prmeter eim Aufrufer nicht verändern uch Zeiger werden y-vlue üergeen, d. h. die Funktion erhält lediglich eine Kopie de Adreverweie üer dieen Verwei knn die Funktion jedoch mit Hilfe de *-Opertor uf die zugehörige Vrile zugreifen und ie verändern cll-y-reference Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.1 void wp (doule *, doule *); int min(void) doule, ; wp(&, &); void wp (doule *, doule *) doule ; = *; * = *; * = ; Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.3 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion void wp (doule *, doule *); int min(void) doule, ; wp(&, &); void wp (doule *, doule *); int min(void) doule, ; wp(&, &); ➊ ➊ void wp (doule *, doule *) doule ; = *; * = *; * = ; Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.2 Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.4
1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion void wp (doule *, doule *); int min(void) doule, ; wp(&, &); void wp (doule *, doule *); int min(void) doule, ; wp(&, &); ➊ void wp (doule *, doule *) doule ; = *; * = *; * = ; void wp (doule *, doule *) doule ; = *; * = *; ➌ * = ; * * ➌ Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.5 Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.7 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion 1 Zeiger l Funktionrgumente U3-1 einfche wp_doule Funktion void wp (doule *, doule *); int min(void) doule, ; wp(&, &); ➊ void wp (doule *, doule *); int min(void) doule, ; wp(&, &); ➊ void wp (doule *, doule *) doule ; = *; ➋ * = *; * = ; * ➋ void wp (doule *, doule *) doule ; = *; ➋ * = *; ➌ * = ; ➍ * ➍ Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.6 Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.8
U3-2 generiche wp-funktion U3-2 generiche wp-funktion U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente Funktion oll Zeiger uf elieigen Dtentyp üergeen ekommen? welchen Typ git mn dem Prmeter Typ = Zeiger uf "irgendetw" Schnitttelle der Funktion void wp_generic(void *, void *, ize_t ) min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof);? wie enutzt mn o einen Zeiger er knn nicht direkt genutzt werden, weil für d Ergeni von * und * der Typ uneknnt it => Progrmm knn nicht dmit umgehen Löung: void-zeiger in einen nderen Zeiger verwndeln => ct-opertor Beipiel: chr *p = (chr *); üer *p knn nun uf d erte Byte de Speicherereich, uf den zeigt, zugegriffen werden Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.9 void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p p U3.11 U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); (doule *) & 8 void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); (ize_t) p Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 U3.10 Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p doule-zeiger &, & werden n void-zeiger, üergeen!!! U3.12
U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p p (ize_t) 8 U3.13 void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p (chr *) zwei Zeiger mit unterchiedlichem Typ zeigen jetzt uf gleiche Speichertelle (Vrile )! p U3.15 U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); void wp_generic(void *, void *, ize_t ); chr *p, *p, ; void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); p (chr *) p = (chr *); = p[1]; p[1] p (chr *) Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p void-zeiger wird in chr-zeiger verwndelt und p zugewieen! U3.14 p wird l chr-arry etrchtet! Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p U3.16
U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); void wp_generic(void *, void *, ize_t ); chr *p, *p, ; void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p p (chr *) U3.17 p = (chr *); p++; = *p; *p Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p p (chr *) zweite Byte der Vrilen wird in zwichengepeichert! U3.19 U3-2 generiche wp-funktion 1 generiche Zeiger l Funktionrgumente min(void) doule, ; void wp_generic(void *, void *, ize_t); wp_generic(&, &, izeof); void wp_generic(void *, void *, ize_t ); chr *p, *p, ; p = (chr *); p++; Jürgen Kleinöder Univerität Erlngen-Nürnerg Informtik 4, 2007 U3.fm 2007-05-21 13.17 p p (chr *) p wird l chr-zeiger etrchtet und inkrementiert - zeigt jetzt uf d zweite Byte von! U3.18