{"id":2675,"date":"2017-02-03T17:09:49","date_gmt":"2017-02-03T16:09:49","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2675"},"modified":"2017-02-03T17:09:49","modified_gmt":"2017-02-03T16:09:49","slug":"cguns-pointer-of-pointer-of","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2675","title":{"rendered":"C++Guns - Pointer of Pointer of ..."},"content":{"rendered":"<p>Was ist ein Pointer auf ein Pointer auf ein Pointer u.s.w. und wozu braucht man das?<br \/>\nMan braucht es eigentlich nicht. Was es ist, werde ich versuchen hier zu erkl\u00e4ren.<br \/>\nEin Pointer verweist auf ein anderes Objekt. Und dieses Objekt kann mit Hilfe des Pointers manipuliert werden.<br \/>\nDazu ein kleines Beispiel:<\/p>\n<pre><code>\r\nvoid manipulate(int *x) { *x = 42; }\r\nint x = 2;\r\nmanipulate(&a);\r\ncout << a; \/\/ print 42\r\n<\/code><\/pre>\n<p>Das Objekt, auf welches der Pointer zeigt, kann auch nachtr\u00e4glich ge\u00e4ndert werden. Beispiel<\/p>\n<pre><code>\r\nint a=2;\r\nint* p = &a;\r\ncout << *p; \/\/ print 2\r\n\r\nint b=3;\r\np = &b;\r\ncout << *p; \/\/ print 3\r\n<\/code><\/pre>\n<p>Es ist auch m\u00f6glich Pointer als Funktionsargument zu nutzen und innerhalb der Funktion den Pointer auf ein anderes Objekt verweisen zu lassen:<\/p>\n<pre><code>\r\nint b=42;\r\nvoid manipulatePointer1(int* p1) {\r\n    p1 = &b;\r\n}\r\n \r\nint a=2;\r\nint* p = &a;\r\ncout << *p; \/\/ print 2\r\n\r\nmanipulatePointer1(p);\r\ncout << *p; \/\/ should print 42, but print 2\r\n<\/code><\/pre>\n<p>So funktioniert es aber nicht. Die Subroutine manipulate1 \u00e4ndert, worauf der Pointer p1 zeigt. Aber nicht worauf der Pointer p in der aufrufende Routine zeigt. Um das zu erreichen, muss die Adresse des Pointer \u00fcbergeben werden, statt nur seinen Wert (die Adresse von a). C++ ist eben einen call-by-value Sprache.<\/p>\n<pre><code>\r\nint b=42;\r\nvoid manipulatePointer2(int** p) {\r\n    *p = &b;\r\n}\r\n\r\nmanipulatePointer2(&p);\r\ncout << *p; \/\/ print 42!\r\n<\/code><\/pre>\n<p>Alles klar?<\/p>\n<p>Das Spiel kann man noch weiter treiben und den Pointer durch 3, 4 Funktionen schleusen. Es braucht daf\u00fcr aber niemals mehr als ein Pointer auf ein Pointer. Da die Adresse des ersten Pointers p, in die Funktionen \u00fcbergeben wird, und nur diese Adresse wird gebraucht.<br \/>\nAlso ein Pointer auf ein Pointer auf ein Pointer ist ein kranker Schei\u00df, den man nicht nutzen soll.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist ein Pointer auf ein Pointer auf ein Pointer u.s.w. und wozu braucht man das? Man braucht es eigentlich nicht. Was es ist, werde ich versuchen hier zu erkl\u00e4ren. Ein Pointer verweist auf ein anderes Objekt. Und dieses Objekt kann mit Hilfe des Pointers manipuliert werden. Dazu ein kleines Beispiel: void manipulate(int *x) { [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-2675","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2675","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=2675"}],"version-history":[{"count":2,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions"}],"predecessor-version":[{"id":2677,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions\/2677"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2675"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}