C Hilfe

Mitglied seit
28.09.2001
Beiträge
2.268
Reaktionen
0
Hi, ich hab da ma ne Frage:

int main(int argc, char *argv[])
{
argv += 1;
}

kompiliert ohne Fehler.

int main()
{
char *s[] = {"Eins", "Zwei", "Drei"};
s += 1;
}

kompiliert nicht. Warum??? Bzw eher warum kompiliert das erste?
Ich hab in meinem C Buch gelesen:
"The computer will allocate space to store the array, but it won't allocate any memory to store the array variable. The compiler simply plugs in the address of the start of the array."
Das würde erklären, warum das zweite Programm nicht kompiliert, man kann array-Variablen (die ja Adressen sind, nur im Gegensatz zu pointern keinen Speicherplatz haben), nicht einfach woanders hinzeigen lassen. Aber warum bitte geht es dann beim ersten Programm?
char *argv[] und char *s[] sind doch beide arrays von pointern auf chars.
Wieso kann ich jetzt bei dem einen was dazuaddieren, beim anderen nicht? WTF?
Hat hier der Array für die Kommandozeilenparameter einen Sonderstatus? In dem Buch wird der einfach manipuliert, ohne Erklärung warum das bei dem jetzt plötzlich geht.
 

Gelöschtes Mitglied 160054

Guest
Empfehlung: Stell die Frage doch im C++-Forum -> http://www.c-plusplus.net/forum/f10

kannste auch als Gast schreiben und die Leute dort sind sehr(!) versiert!

C ist generell behindert, Pointergeschwurbel sowieso.
Ich empfehle dir C++ (wenn du da (nackte) Zeiger benutzt biste eh n versager), gibt eigentlich kaum nen Grund C zu verwenden.

Lange her das ich C programmiert habe, ich vermute der Grund liegt darin, dass ohne Angabe eines Inhaltes für den Array implizit char** verwendet wird, so dass du natürlich die Adresse ändern kannst. Dies ist bei der alternativen Methode die nicht kompiliert nicht so, denn für Arrays funktioniert die Adressänderung via +n nicht.
 
Mitglied seit
28.09.2001
Beiträge
2.268
Reaktionen
0
Ah, manchmal liest man auch in der main-Funktion (int argc, char **argv) als Parameter, dann wärs ja klar. Ich erinnere mich auch gerade, dass Arrays in Funktionen dann immer als Pointer übergeben werden. Dann wärs ja klar, denn die main-Funktion bildet da bestimmt keine Ausnahme.

Ja wegen C/C++ hab ich überlegt, was ich erst lerne, ich find so Low-Level hardwarenahe Geschichten irgendwie spannend, daher schau ich mir erstmal C an.
 
Mitglied seit
28.09.2001
Beiträge
2.268
Reaktionen
0
Da gibts irgendwie Smart-Pointers oder so. Gibt doch glaube ich den Spruch
"Smart programmers use smart pointers."
 
Mitglied seit
23.11.2004
Beiträge
1.142
Reaktionen
8
Man könnte ja googlen, aber das wär langweilig. Daher hau ich auch mal ne Vermutung raus: für ein Argument einer Funktion muss sowieso Speicher alloziert werden, da die Funktion ja auf die Argumente zugreifen können muss (und der Compiler zur Compilierzeit nicht unbedingt wissen kann, wer die Funktion mal aufruft und mit welchen Argumenten). Bei lokalen Variablen kennt der Compiler hingegen zur Kompilezeit die Adresse.
 

Gelöschtes Mitglied 160054

Guest
hmm warum is man dann ein versager? Ich dachte Zeiger sind voll :gosu:

gibts smart pointer die memory leaks verhindern. Ansonsten haste deine Standard template library die eigentlich für alles mögliche bereits entsprechende container anbietet die intern gut erprobt dir den pointerkrams abnimmt.
 
Mitglied seit
14.07.2003
Beiträge
3.128
Reaktionen
0
gibts smart pointer die memory leaks verhindern. Ansonsten haste deine Standard template library die eigentlich für alles mögliche bereits entsprechende container anbietet die intern gut erprobt dir den pointerkrams abnimmt.

smart pointer können aber genauso hässlich werden wenn du noch referenzen irgendwo hast. dann hast du auch memory leaks...
 

Gelöschtes Mitglied 160054

Guest
smart pointer können aber genauso hässlich werden wenn du noch referenzen irgendwo hast. dann hast du auch memory leaks...

das ist ungefähr so als wenn du zum unfallfreiem fahrrad fahren stützräder montierst und danach meinst ja aber wenn du dich absichtlich vom fahrrad stürzt tut es immernoch weh, also stützräder lol
 
Mitglied seit
14.07.2003
Beiträge
3.128
Reaktionen
0
das ist ungefähr so als wenn du zum unfallfreiem fahrrad fahren stützräder montierst und danach meinst ja aber wenn du dich absichtlich vom fahrrad stürzt tut es immernoch weh, also stützräder lol

ich denke, dass hängt stark von der appliktation ab, an der man arbeitet.
 
Oben