{"id":151,"date":"2010-06-08T21:50:50","date_gmt":"2010-06-08T20:50:50","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=151"},"modified":"2011-07-25T14:18:11","modified_gmt":"2011-07-25T13:18:11","slug":"pointer-und-so","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=151","title":{"rendered":"Pointer und so"},"content":{"rendered":"<p>Hier gefunden http:\/\/www.wachtler.de\/ck\/8_4_Grunddatentypen.html<\/p>\n<blockquote><p>\nC erh\u00e4lt durch Zeigerarithmetik erst richtig Leben; die gr\u00f6\u00dfere Effektivit\u00e4t von Programmen in C r\u00fchrt zu einem gro\u00dfen Teil davon. Angenommen, eine Funktion soll ein Feld mit double-Elementen l\u00f6schen, also alle Werte zu 0.0 setzen. Ein ehemaliger FORTRAN- oder Pascal-Programmierer w\u00fcrde die Funktion vielleicht so schreiben:<\/p>\n<p>\/* grloel.c 31. 7.95 kw<br \/>\n *\/<\/p>\n<p>#include <stddef.h><\/p>\n<p>void loesche_double( double feld[], size_t wieviele )<br \/>\n{<br \/>\n  size_t  i;<\/p>\n<p>  for( i=0 ; i < wieviele ; i++ )\n    feld[i] = 0.0;\n}\n\nDas funktioniert nat\u00fcrlich, aber die L\u00f6sung enth\u00e4lt \u00fcberfl\u00fcssige Berechnungen. Abgesehen von der n\u00f6tigen Erh\u00f6hung des Schleifenz\u00e4hlers (Auswertung von ++) mu\u00df bei jedem Durchlauf die Adresse des Elementes feld[i] berechnet werden. Dazu mu\u00df das Programm die Adresse hernehmen, die mit dem Namen feld verbunden ist (das ist die Adresse des ersten Feldelements), und dazu ein Produkt addieren, n\u00e4mlich i*sizeof(double) (zur Auswertung von feld[i]).\n\nMit Zeigerarithmetik l\u00e4\u00dft sich die Funktion wesentlich schneller machen:\n\n\/* grloes.c 31. 7.95 kw\n *\/\n\n#include <stddef.h><\/p>\n<p>void loesche_double( double *feld, size_t wieviele )<br \/>\n{<br \/>\n  double *pfeld = feld;<br \/>\n  double *pende = feld+wieviele;<\/p>\n<p>  while( pfeld < pende )\n    *pfeld++ = 0.0;\n}\n\nJetzt wird der Parameter feld als Zeiger auf das erste Element aufgefa\u00dft. Ein Zeiger (pfeld) wandert durch das Feld und zeigt nacheinander auf die zu l\u00f6schenden Elemente. Neben der eigentlichen Zuweisung (=) mu\u00df in der Schleife nur noch zu pfeld bei jedem Durchlauf der Wert sizeof(double) addiert werden (Auswertung von ++). Die aufwendige Multiplikation entf\u00e4llt, au\u00dferdem hat man statt zwei Additionen nur noch eine. \n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Hier gefunden http:\/\/www.wachtler.de\/ck\/8_4_Grunddatentypen.html C erh\u00e4lt durch Zeigerarithmetik erst richtig Leben; die gr\u00f6\u00dfere Effektivit\u00e4t von Programmen in C r\u00fchrt zu einem gro\u00dfen Teil davon. Angenommen, eine Funktion soll ein Feld mit double-Elementen l\u00f6schen, also alle Werte zu 0.0 setzen. Ein ehemaliger FORTRAN- oder Pascal-Programmierer w\u00fcrde die Funktion vielleicht so schreiben: \/* grloel.c 31. 7.95 kw *\/ [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[14],"class_list":["post-151","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-c"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=151"}],"version-history":[{"count":3,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":152,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/151\/revisions\/152"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}