Ich find Deine Videos seeehr hilfreich. Ich bin im 1.Semester und neu im Thema. Die Videos veranschaulichen die Inhalte wesentlich besser als die trockenen Vorlesungen. DANKE LIEBES PILZSCHAF
Es bedarf: 2 Semester der Informatik Endloses Pauken ODER Ein 20 Minuten Video Um meinem verklumpten Gehirn beizubringen wo man Pointer braucht und wie man sie verwendet.
@ Majestic Frog Ohja wie du recht hast, same mit Ausbildung! Ich beschäftige mich im Privaten gerade mit OpenGL und jetzt geht so ein extrem helles Licht bei mir oben auf. :D @Pilzscharf Danke für das Video! :)
Ich hatte bis jetzt immer nur mit Pointern Probleme und brauchte jetzt ne Auffrischung. Nach deinem Video kommt es mir so vor als hätte ich es besser wie jemals zuvor verstanden ^^ danke!
schwer ist nur wenn man's sich schwer macht. ich bin zwar noch n Einsteiger, mein Lieblingsthema ist aber Zeiger -Arithmetik Edit; wer in c++ programmiert muss sich zwangsläufig mit dem Aufbau der internen Speicherstruktur auseinander setzen. da dynamische Speicherverwaltung ein wichtiges Thema ist. Grüße
Fehlen bißchen Fachbegriffe, die ich in der Vorlesung aus C kenne - ansonsten helfen mir deine Videos beim C++ lernen für ein Praktikum Ende des Jahres weiter👐
Vielen Dank für Deine Videos - alles Wichtige verständlich erklärt. Du sagtst, der Vorteil vom Pointer ist, das man große Variablen nicht als Kopie an eine Funktion übergeben muss. Wenn man der Funktione den pointer übergibt, muss die Funktion die große Variable dann nicht auch erstmal aus dem Speicher holen, bevor sie damit etwas anfngen kann? Ich meine, einmal muss doch die der variablenwert gelesen und der Funktion "gegeben" werden. Ist das nicht egal wann das genau passiert?
Das ist richtig. Gelesen werden muss der Speicher so oder so, wenn darauf zugegriffen wird. Ohne Pointer muss das Objekt allerdings kopiert werden. Da die Funktion das Objekt modifizieren können soll ohne dass sich das Ursprungsobjekt verändert.
Warum muss man einer Funktion, die einen Zeiger als input nimmt eine Adresse übergeben und nicht einen Zeiger? Könnte ich zum Beispiel einen Zeiger erstellen, der auf die Adresse irgendeiner Variable zeigt an SetTo27 übergeben, damit die Funktion den Wert der Variable auf 27 setzt?
Genau das ist möglich. Wenn du die Addresse übergibst erstellst du damit im Endeffekt auch nur einen temporären Zeiger der entsprechend auf die Variable zeigt, deren Addressse du abgefragt hast.
XD Ich bin gerade dabei, Komplet kalt und ohne Vorkenntnisse mit Hilfe deiner Videos C++ zu lernen. Ich habe bis jetzt noch nicht den genauen nutzen verstanden...
Das casten ist doch in der Hinsicht nicht nötig, da du 2 integer teilst und sie in einem integer speicherst, dementsprechend kommt da eine ganzzahl doch schon raus. Wäre der dividend oder divisor ein float, dann müsstest du casten, aber ist es nicht sonst unnötig?
Die Funktionszeiger hab ich noch nicht ganz verstanden aber ich schau mir noch paar Sachen dazu an. Also in Zeile 44 wird ein Funktionszeiger erstellt, welcher natürlich durch die Orginalfunktion einen int Zeiger (int*) beinhaltet. Was passiert dann am Ende mit = SetTo27. Wird damit der int Zeiger (int*) initialisiert ? In Zeile 45 wird dann die Funktion über den Funktionszeiger aufgerufen, welcher dann den initialisierten int Zeiger(int*) beinhaltet und gleichzeitig in das Array schreibt oder wie ? Hab mal versucht meinen Gedankengang zu erklären :D vielleicht kannst du mir sagen ob ich das so richtig verstanden habe xD Vielen Dank schon mal, mach weiter so super Videos :)
Mit dem Funktionszeiger geben wir an, dass dort eine Funktion gespeichert werden kann, die einen void Rückgabewert und einen einzigen Parameter und zwar den int Zeiger besitzt. int (*funcPointer)(void) wäre z.B. auch ein Funktionszeiger, der aber nur Funktionen entgegen nehmen kann, die einen int als Rückgabewert haben und keine Parameter erwarten. Da SetTo27 Eine Funktion ist, die genau die Eigenschaften unseres Funktionszeigers hat sprich einen void Rückgabewert und einen int* als Parameter können wir diese dem function pointer Zuweisen und darüber dann auch ausführen. Nochmal etwas mehr Lowlevel: Wenn wir normalerweise eine Funktion aufrufen dann springen wir mit der aktuellen Ausführung dorthin, wo der Programmcode der Funktion steht. In den Functionpointer schreiben wir demnach auch einfach nur die Addresse, an der Programmcode der Funktion steht. Ich werde vielleicht irgendwann mal einen gesonderten Part dazu machen, wo wir uns das ganze auch mal von Grund auf anschauen werden. Tatsächlich nutzt man Function Pointer aber gar nicht so häufig, weshalb der Teil dazu hier in dem Video auch verhältnismäßig kurz war.
Das Video ist cool und hilfreich aber deine Art und weise das Wort Integer auszusprechen tut mir weh, es ist ein Integer und kein In-Tee-ger (das ger wird gjer ausgesprochen)
Das stimmt. Deshalb gibt es auch void pointer. Sobald man aber auf die Daten, auf die der Zeiger zeigt zugreifen will muss man wissen, um was für einen Typ es sich handelt.
Das hast du falsch verstanden. Der Datentyp ist nicht die Adresse. Die Adresse ist der Wert/value vom pointer! Unabhängig vom pointer Datentyp. Stell dir den pointer als eine Funktion vor. Er hat einen Datentyp und als wert eine Adresse. Wenn du nun auf den Inhalt der auf dieser Adresse zugreifen willst (ändern/lesen), dann nimmt die Funktion seine gespeicherte Adresse und geht erst dorthin im Speicher um die Aktion auszuführen. Warum gibt es also nun void pointer? Weil du evtl. nicht wissen kannst welchem Datentyp der Anwender deiner Funktion übergibt oder schlimmer, es erst zur Laufzeit passiert oder entschieden wird. Ein anderer Einsatzzweck sind um generische Funktionen bauen zu können die verschiedene Datentypen annehmen kann ohne diese Funktion mehrfach neu zu erstellen. In c++ benutzt man dafür aber lieber template Funktionen! Vergiss aber nicht, der Zugriff auf die echten Daten hinter dem Pointer braucht trotzdem einen Datentyp! Dieser wird dann halt gecastet. #> void* p = &intvar; #> cout
super videos bis jetzt nur eine sache ist sehr zu bemängeln: bitte und ich kann in worten nicht ausdrücken wie stark diese bitte ist, gewöhne dir an integer wie im englischen auszusprechen, denn 1. das ist basic c++ sprich für anfänger/leute ohne programmierkentnisse gedacht, diese gewöhnen sich die falsche aussprache an, wenn der begriff nicht bekannt ist und grundätzlich ist es auch eine schlechte vorgehensweise schülern eigenheiten des lehrers mit beizubringen, ganz egal welche, und sollte möglichst vermieden werden 2. ist die vorherschende sprache in der IT englisch und bei so einem verbreiteten begriff ist das für deine lehrlinge und dich eine blamage es so auszusprechen 3. ich persönlich habe bereits vorkenntnisse und schaue mir die serie an um einen einstieg in c++ zu bekommen (komme von java), im ersten moment fragte ich mich was du überhaupt meinst, denn selbst im deutschen heißt es nicht 'intehger' sondern ganzzahl, ab dem moment wo ich gemerkt habe was du damit überhaupt meinst hat es nur noch gestört falls dir das wegen alteingesessenheit nicht möglich ist dann sag wenigstens 'int' ansonsten wie gesagt gute arbeit
Super Kommentar. Nur eine zwei Sachen sind sehr zu bemängeln: //Das ist etwas ironisch und als Spaß gemeint. Ich kann in Worten nicht ausdrücken, wie stark meine Bitte ist, dass Schreibende der deutschen Sprache auf die Groß- und Kleinschreibung achten. Bitte gewöhne Dir das an. 1. Ich mag die deutsche Aussprache von "integer". Ich hatte in der Schule Latein. Vielleicht liegt es daran. 2. Was ist wichtiger, zu verstehen was man tut oder "integer" richtig aussprechen? Hör mir auf mit Blamage. Da sollte die Mehrheit der Deutschen vielleicht gar nicht programmieren, wenn ich mir so die Aussprache des Englischen bei den meisten Deutschen anhöre. 3. Wenn ein Programmierer Schwierigkeiten damit hat, dass es zwei oder noch mehr akustische Stellvertreter für ein geschriebenes Wort gibt, dann wird er bei seiner Arbeit mehr Probleme haben, als nur, sich von der Aussprache gestört zu fühlen. Falls dir das wegen Alteingesessenheit nicht möglich ist, dann weiß ich auch nicht. ;-)
@WannaBeDev de.wikipedia.org/wiki/Integer_(Datentyp) Es gibt zwei verschiedene Arten dieses Wort auszusprechen. Die erste wurde hier von Pilzschaf verwendet. Du kannst dir ja mal die Lautschrift im Wikipedia-Artikel anschauen.
@WannaBeDev Nur weil du es noch nie gehört hast, muss die deutsche Aussprache also falsch sein? Mein alter Informatiklehrer hat es ebenfalls so ausgesprochen. Und auf leo.org findest du das Wort im Deutschen z.B. auch: dict.leo.org/englisch-deutsch/Integer-Wert Ich glaube nicht, dass da einfach nur das Englische Wort gemeint ist. Die Aussprache ist vielleicht ungewöhnlich, aber sicher nicht falsch.
Ich find Deine Videos seeehr hilfreich. Ich bin im 1.Semester und neu im Thema. Die Videos veranschaulichen die Inhalte wesentlich besser als die trockenen Vorlesungen. DANKE LIEBES PILZSCHAF
Das Video hat es mir gut beigebracht, obwohl ich davon noch nie etwas gehört habe !
Es bedarf: 2 Semester der Informatik
Endloses Pauken
ODER
Ein 20 Minuten Video
Um meinem verklumpten Gehirn beizubringen wo man Pointer braucht und wie man sie verwendet.
Majestic Frog Pointer sind ja Extrems einfach habe immer gehört die sind mega schwer da finde ich schleifen deutlich schwerer
@ Majestic Frog Ohja wie du recht hast, same mit Ausbildung! Ich beschäftige mich im Privaten gerade mit OpenGL und jetzt geht so ein extrem helles Licht bei mir oben auf. :D @Pilzscharf Danke für das Video! :)
Ich habe das Wort "verklumpt" noch nie in diesem Kontext gehört und es verstört mich xD
versteh es immer noch nicht, es will mir nicht einleuchten 😭
Ich hatte bis jetzt immer nur mit Pointern Probleme und brauchte jetzt ne Auffrischung. Nach deinem Video kommt es mir so vor als hätte ich es besser wie jemals zuvor verstanden ^^ danke!
Super, danke! Hat mir sehr für die Klausurvorbereitung geholfen!!
Zeiger in C++ sind in Funktionen wie der ref-parameter in Methoden in C#, habe ich dies richtig verstanden
Pascal: procedure name (var integer num);
das ist super gemacht DANKE!! ....dein Logo erinnert mich an ein Blutwurstschaf :-))
schwer ist nur wenn man's sich schwer macht. ich bin zwar noch n Einsteiger, mein Lieblingsthema ist aber Zeiger -Arithmetik
Edit;
wer in c++ programmiert muss sich zwangsläufig mit dem Aufbau der internen Speicherstruktur auseinander setzen. da dynamische Speicherverwaltung ein wichtiges Thema ist. Grüße
Ist echt gut erklärt Danke :D
Sehr gut erklärt, danke!
Fehlen bißchen Fachbegriffe, die ich in der Vorlesung aus C kenne - ansonsten helfen mir deine Videos beim C++ lernen für ein Praktikum Ende des Jahres weiter👐
Top Erklärung. Danke!
Vielen Dank für Deine Videos - alles Wichtige verständlich erklärt. Du sagtst, der Vorteil vom Pointer ist, das man große Variablen nicht als Kopie an eine Funktion übergeben muss. Wenn man der Funktione den pointer übergibt, muss die Funktion die große Variable dann nicht auch erstmal aus dem Speicher holen, bevor sie damit etwas anfngen kann? Ich meine, einmal muss doch die der variablenwert gelesen und der Funktion "gegeben" werden. Ist das nicht egal wann das genau passiert?
Das ist richtig. Gelesen werden muss der Speicher so oder so, wenn darauf zugegriffen wird. Ohne Pointer muss das Objekt allerdings kopiert werden. Da die Funktion das Objekt modifizieren können soll ohne dass sich das Ursprungsobjekt verändert.
@@Pilzschaf ein Semester Assembler und man versteht wie schnell das einem wieder zu C und höher führt um nicht in der Hölle zu verbrennen🙂
Mega gut erklärt!
Hi Pilzschaf, super Video! Eigentlich, um es einfach zu erklären, macht man aus einer Variable noch eine Variable, oder? xD
was bringt denn das sogenannte "casten" in 11:32? Ich weiß zwar, dass es sich auf den Datentyp bezieht aber sehe den Sinn noch nicht ganz. ^^
hey, es wäre klasse wenn du auch den code hochladen könntest! Oder in die Info packen oder so!
Genial das Video!
warum nicht einfach per reference an die Funktion übergeben, wenn man mehrere Rückgabewerte will? Ist das Gleiche oder?
Warum muss man einer Funktion, die einen Zeiger als input nimmt eine Adresse übergeben und nicht einen Zeiger? Könnte ich zum Beispiel einen Zeiger erstellen, der auf die Adresse irgendeiner Variable zeigt an SetTo27 übergeben, damit die Funktion den Wert der Variable auf 27 setzt?
Genau das ist möglich. Wenn du die Addresse übergibst erstellst du damit im Endeffekt auch nur einen temporären Zeiger der entsprechend auf die Variable zeigt, deren Addressse du abgefragt hast.
Tolles Video!
Welches Programm nutzt du zum programmieren?
Ist nicht VisualSTudio oder?
VG
ja es ist visualstudiocode hat er auch in dem ersten video der playlist gezeigt
@@bzero7857 ist es nicht kdevelop?
Und das Hello world hat er in Visual studio geschrieben
In diesem Video benutzt er KDevelop
@@Zombi-uw9ml ja hab es gerade auch gemerkt lol sry
vielen Dank!
Wie kann ich dass an ein Programm, z.B. ein Spiel attachen, um dann die weerte zu ändern?
sowas wie Cheat Engine?
XD
Ich bin gerade dabei, Komplet kalt und ohne Vorkenntnisse mit Hilfe deiner Videos C++ zu lernen.
Ich habe bis jetzt noch nicht den genauen nutzen verstanden...
Das casten ist doch in der Hinsicht nicht nötig, da du 2 integer teilst und sie in einem integer speicherst, dementsprechend kommt da eine ganzzahl doch schon raus. Wäre der dividend oder divisor ein float, dann müsstest du casten, aber ist es nicht sonst unnötig?
wenn ich beim VoidEuclidiendivide return 0 / return-1 eingebe dann schreibt er :" Der rückgabewert stimmt nicht mit dem Funktionstyp überein
Du musst Rückgabe Datentyp der Funktion von void auf int ändern.
Die Funktionszeiger hab ich noch nicht ganz verstanden aber ich schau mir noch paar Sachen dazu an.
Also in Zeile 44 wird ein Funktionszeiger erstellt, welcher natürlich durch die Orginalfunktion einen int Zeiger (int*) beinhaltet.
Was passiert dann am Ende mit = SetTo27. Wird damit der int Zeiger (int*) initialisiert ?
In Zeile 45 wird dann die Funktion über den Funktionszeiger aufgerufen, welcher dann den initialisierten int Zeiger(int*) beinhaltet und gleichzeitig in das Array schreibt oder wie ?
Hab mal versucht meinen Gedankengang zu erklären :D vielleicht kannst du mir sagen ob ich das so richtig verstanden habe xD
Vielen Dank schon mal, mach weiter so super Videos :)
Mit dem Funktionszeiger geben wir an, dass dort eine Funktion gespeichert werden kann, die einen void Rückgabewert und einen einzigen Parameter und zwar den int Zeiger besitzt.
int (*funcPointer)(void) wäre z.B. auch ein Funktionszeiger, der aber nur Funktionen entgegen nehmen kann, die einen int als Rückgabewert haben und keine Parameter erwarten. Da SetTo27 Eine Funktion ist, die genau die Eigenschaften unseres Funktionszeigers hat sprich einen void Rückgabewert und einen int* als Parameter können wir diese dem function pointer Zuweisen und darüber dann auch ausführen.
Nochmal etwas mehr Lowlevel: Wenn wir normalerweise eine Funktion aufrufen dann springen wir mit der aktuellen Ausführung dorthin, wo der Programmcode der Funktion steht. In den Functionpointer schreiben wir demnach auch einfach nur die Addresse, an der Programmcode der Funktion steht.
Ich werde vielleicht irgendwann mal einen gesonderten Part dazu machen, wo wir uns das ganze auch mal von Grund auf anschauen werden. Tatsächlich nutzt man Function Pointer aber gar nicht so häufig, weshalb der Teil dazu hier in dem Video auch verhältnismäßig kurz war.
@@Pilzschaf Du bist der hammer, danke für die schnelle und ausführliche Antwort
warum benutzt du endl ?
endl bewirkt, dass dannach ein Absatz folgt
Das sieht schöner aus
Jetzt weiß ich wieder warum ich Informatik 2 damals in der Hochschule geskipped habe xD
F**k*ng Zeiger...
geile Voicecracks
#27
Das Video ist cool und hilfreich aber deine Art und weise das Wort Integer auszusprechen tut mir weh, es ist ein Integer und kein In-Tee-ger (das ger wird gjer ausgesprochen)
Alle am Studieren hier und ich sitze hier 1. Tag in Ausbildung zum Fachinformatiker f. Systemintegration und prügel mir Pointer rein :D
Das * ist das Gegenstück zu & . Danke das hat mir sehr geholfen. Das Buch von Michael Bonacina ist wirklich scheisse im Kapitel Zeiger.
Du und die 27. Unzertrennlich.
dachte ich mir auch die ganze zeit xD
Hat sich jemals jemand gefragt wieso ein Zeiger einen Datentyp braucht? Schlussendlich besitzt er immer den gleichen Typ und nämlich eine Adresse?!
Das stimmt. Deshalb gibt es auch void pointer. Sobald man aber auf die Daten, auf die der Zeiger zeigt zugreifen will muss man wissen, um was für einen Typ es sich handelt.
@@Pilzschaf Danke
Das hast du falsch verstanden. Der Datentyp ist nicht die Adresse.
Die Adresse ist der Wert/value vom pointer! Unabhängig vom pointer Datentyp.
Stell dir den pointer als eine Funktion vor.
Er hat einen Datentyp und als wert eine Adresse. Wenn du nun auf den Inhalt der auf dieser Adresse zugreifen willst (ändern/lesen), dann nimmt die Funktion seine gespeicherte Adresse und geht erst dorthin im Speicher um die Aktion auszuführen.
Warum gibt es also nun void pointer? Weil du evtl. nicht wissen kannst welchem Datentyp der Anwender deiner Funktion übergibt oder schlimmer, es erst zur Laufzeit passiert oder entschieden wird.
Ein anderer Einsatzzweck sind um generische Funktionen bauen zu können die verschiedene Datentypen annehmen kann ohne diese Funktion mehrfach neu zu erstellen. In c++ benutzt man dafür aber lieber template Funktionen!
Vergiss aber nicht, der Zugriff auf die echten Daten hinter dem Pointer braucht trotzdem einen Datentyp! Dieser wird dann halt gecastet.
#> void* p = &intvar;
#> cout
super videos bis jetzt nur eine sache ist sehr zu bemängeln:
bitte und ich kann in worten nicht ausdrücken wie stark diese bitte ist, gewöhne dir an integer wie im englischen auszusprechen, denn
1. das ist basic c++ sprich für anfänger/leute ohne programmierkentnisse gedacht, diese gewöhnen sich die falsche aussprache an, wenn der begriff nicht bekannt ist und grundätzlich ist es auch eine schlechte vorgehensweise schülern eigenheiten des lehrers mit beizubringen, ganz egal welche, und sollte möglichst vermieden werden
2. ist die vorherschende sprache in der IT englisch und bei so einem verbreiteten begriff ist das für deine lehrlinge und dich eine blamage es so auszusprechen
3. ich persönlich habe bereits vorkenntnisse und schaue mir die serie an um einen einstieg in c++ zu bekommen (komme von java), im ersten moment fragte ich mich was du überhaupt meinst, denn selbst im deutschen heißt es nicht 'intehger' sondern ganzzahl, ab dem moment wo ich gemerkt habe was du damit überhaupt meinst hat es nur noch gestört
falls dir das wegen alteingesessenheit nicht möglich ist dann sag wenigstens 'int'
ansonsten wie gesagt gute arbeit
Super Kommentar. Nur eine zwei Sachen sind sehr zu bemängeln: //Das ist etwas ironisch und als Spaß gemeint.
Ich kann in Worten nicht ausdrücken, wie stark meine Bitte ist, dass Schreibende der deutschen Sprache auf die Groß- und Kleinschreibung achten. Bitte gewöhne Dir das an.
1. Ich mag die deutsche Aussprache von "integer". Ich hatte in der Schule Latein. Vielleicht liegt es daran.
2. Was ist wichtiger, zu verstehen was man tut oder "integer" richtig aussprechen? Hör mir auf mit Blamage. Da sollte die Mehrheit der Deutschen vielleicht gar nicht programmieren, wenn ich mir so die Aussprache des Englischen bei den meisten Deutschen anhöre.
3. Wenn ein Programmierer Schwierigkeiten damit hat, dass es zwei oder noch mehr akustische Stellvertreter für ein geschriebenes Wort gibt, dann wird er bei seiner Arbeit mehr Probleme haben, als nur, sich von der Aussprache gestört zu fühlen.
Falls dir das wegen Alteingesessenheit nicht möglich ist, dann weiß ich auch nicht. ;-)
Die Aussprache ist doch vollkommen korrekt. Er spricht das Wort "Integer" halt deutsch aus, dagegen ist überhaupt nichts einzuwenden wie ich finde.
@WannaBeDev de.wikipedia.org/wiki/Integer_(Datentyp)
Es gibt zwei verschiedene Arten dieses Wort auszusprechen. Die erste wurde hier von Pilzschaf verwendet. Du kannst dir ja mal die Lautschrift im Wikipedia-Artikel anschauen.
@WannaBeDev Nur weil du es noch nie gehört hast, muss die deutsche Aussprache also falsch sein? Mein alter Informatiklehrer hat es ebenfalls so ausgesprochen. Und auf leo.org findest du das Wort im Deutschen z.B. auch:
dict.leo.org/englisch-deutsch/Integer-Wert
Ich glaube nicht, dass da einfach nur das Englische Wort gemeint ist. Die Aussprache ist vielleicht ungewöhnlich, aber sicher nicht falsch.
@WannaBeDev Jung, du bist ja mal richtig aggro. :D
Kann man dich immer so leicht triggern? Es bietet auf jeden Fall gute Unterhaltung! :D
Auch nicht in der Lage gewesen, den Text für das Video zu vergrößern?
Mega gut erklärt. Danke