*)Bekommt man einen Login, um seinen eigenen Code auf eure Systeme vor der Abgabe kompilieren uns somit testen zu können? Wenn ja ab wann und wird das in der KU / VO noch angesagt?
*)Ist ein struct mit dem Objekt gleichzusetzen oder gibt es Unterschiede?
Helft mir bitte dabei und korrigiert mich, wenn nötig, ob ich das richtig lese!
Frage / Beispiel 1 aud VO 1:
Man hat void main wo per & im f(&p,m) die Adresse (0x7...) übergeben wird (Was bei mir laut Ubuntu mit dem Output 1.1 den Wert 2126214692 hat, somit kein 0x..., wieso?) Dann wiederum per void f(...) mit dem int* veranlasst wird, dass nur ein Pointer als Eingabe erlaubt wird, (was aus meiner Sicht etwas unlogisch erscheint, da & != * sein sollte. Hätte man hier nicht einfach int& p nehmen können, damit man sich das *-Sternchen ersparen hätte können?) damit dann per *p die Zahl über die gleiche Adresse wieder angesprochen wird (wie laut Output 1.f.2), um die Rechnung per *p + m zu ermöglichen. Dann muss man wieder *p = ... setzen, damit C++ versteht, dass es nur den Wert auf exakt der eingegebenen Adresse unter p verändern soll, damit kein neuen Speicher reservieren wird (Was aus meiner Sicht etwas strange ist, da ja p per int* p so oder so nur das sein kann / soll) Übersehe ich da etwas oder ist genau sowas der Grund, wieso viele Firmen wie google und co. nicht ohne Grund (zum Eigenschutz, etc.) eigene Programmiersprachen entwickeln, um von dieser Logik weg zu kommen. Zwischeninfo: Und nein, objektorientierte Programmierung habe ich noch nie gebraucht, obwohl ich bereits einige riesige Projekte in php, python und js realisiert habe. Auch auf systemtechnischer Ebene habe ich lieber python statt c++ genutzt, um billige bis mittlere Securitystandards für meinen Server zu entwickeln
Output: g++ oop1.cpp -o foo && ./oop1
1.1: 2125202980
1.f.1: 2125202980
1.f.2: 5
1.f.3: 20
1.2: 30
x.1: 0x7eac0620
x.2: 0x7eac0620
x.3: 0x1
Frage / Beispiel 3 aus VO 2:
2.1) Unter int main() werden 2 Argumente benötigt, int argc und char* argv[]. Man kann ja auch nur main(int ,argv[]) nehmen, nur bin ich mir hierbei nicht sicher ob dieses int nur zum Unterdrücken von Warnings genutzt wird oder ob es auch andere Konsequenzen hat. Welche Unterschiede entstehen bei der Nutzung von main(int, char* argv[]) zu main(int argc, char* argv[])? Was übersehe ich hier?
2.2) Was mich aber eher verwirrt ist *(argv + 1)! argv ist für mich ein array, da die Eingabe will be bla bla zu einem Array gebündelt wird, sobald ein space erkannt wird. Wie kann es dann sein, dass argv + 1 funktionieren kann? In anderen Programmiersprachen als auch dieser macht man das per argv[1], womit man direkt auf die Variabe zugreifft. Mag sein, das C++ dabei auch den Namen der auszuführenden File (oop1) als 0-tes Arraymitglied implementiert, womit eine Stelle weiter (will) die Lösung sein muss. Nur wieso funktioniert das mit argv + 1?
2.3)Soweit ich das verstanden habe erzeugt der Compiler selbst das Array argv[], speichert es ab und übergibt per Pointer char* argv[] dies an die an die Funktion übergeben wird, an die Speicheradresse platziert wird und wir per *(argv + 1) auf die Werte abrufen ist mir der Pointer an dieser Stelle verständlich.