String
-
meinst du mit mehreren Strings etwa sowas ?
char* array[5][];ein Zeiger kann doch immer nur auf eine einzige Adresse zeigen ?
-
blurry333 schrieb:
meinst du mit mehreren Strings etwa sowas ?
char* array[5][];ein Zeiger kann doch immer nur auf eine einzige Adresse zeigen ?
char**ist ein Zeiger auf einen Zeiger.charr**zeigt auf den Anfang eines Arrays aus Zeigern. Und jeder Zeiger in diesem Array zeigt auf einen String.
-
mein Compiler schluckt das problemlos.
void funk(char* x){} //main char* array[5][10]; funk(array);
-
blurry333 schrieb:
mein Compiler schluckt das problemlos.
void funk(char* x){} //main char* array[5][10]; funk(array);Kompilierst Du das als C-Code?
-
ja als C code mit Eclipse
-
blurry333 schrieb:
ja als C code mit Eclipse
Und warum fragst Du im C++-Forum? Nach knapp 450 Posts sollte man wissen, welches Forum man benutzt...
-
blurry333 schrieb:
meinst du mit mehreren Strings etwa sowas ?
char* array[5][];Das ist kein C++ (auch kein C).
blurry333 schrieb:
ein Zeiger kann doch immer nur auf eine einzige Adresse zeigen ?
Eine Zeigervariable speichert höchstens eine Adresse, ja.
#include <iostream> using namespace std; int main(int argc, char **argv) { for (int i=0; i<argc; ++i) { if (i>0) std::cout << ' '; std::cout << argv[i]; } std::cout << std::endl; }Speicherlayout (Beispiel mit sizeof(char*)==4):
Name: argc argv argv[0] argv[1] argv[2] Adresse: egal egal 152 156 160 +-------+ +-------+ +-------+-------+-------+ Inhalt: | 3 | | 152 | | 400 | 412 | 405 | +-------+ +-------+ +-------+-------+-------+ Adresse: 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ Inhalt: | w | h | a | t |\0 | f | * | c | k | ? | ! |\0 | t | h | e |\0 | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+Ausgabe:
what the f*ck?!Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.
-
[quote="krümelkacker"]
blurry333 schrieb:
Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.
Da bekomm ich aber was anderes raus :
printf("Adresse in argv: %x\n",argv); printf("Adresse von argv[0]: %x",&argv[0]);Ausgabe:
Adresse in argv: 3e3c48
Adresse von argv[0]: 3e3c48
-
[quote="blurry333"]
krümelkacker schrieb:
blurry333 schrieb:
Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.
Da bekomm ich aber was anderes raus :
printf("Adresse in argv: %x\n",argv); printf("Adresse von argv[0]: %x",&argv[0]);Ausgabe:
Adresse in argv: 3e3c48
Adresse von argv[0]: 3e3c48Ersteres gibt nicht die adresse von argv aus, sondern die vom inhalt von argv. Das zweite ebenfalls. &argv ist die adresse von argv, weder argv noch &argv[0]
-
printf("Adresse in argv: %x -> %x\n",*argv, argv); printf("Adresse von argv[0]: %x\n",&argv[0]); printf("Adresse von argv[1]: %x",&argv[1]);Adresse in argv: 3e2441 -> 3e24c8 Adresse von argv[0]: 3e24c8 Adresse von argv[1]: 3e24ccgreetz KN4CK3R
-
blurry333 schrieb:
krümelkacker schrieb:
Man beachte: argv zeigt nicht auf (den Anfang) eine(r) Zeichenkette.
Da bekomm ich aber was anderes raus :
printf("Adresse in argv: %x\n",argv); printf("Adresse von argv[0]: %x",&argv[0]);Ausgabe:
Adresse in argv: 3e3c48
Adresse von argv[0]: 3e3c48Das klingt so, als würdest Du glauben, hier einen Widerspruch aufgezeigt zu haben. Dem ist nicht so. zeiger==&zeiger[0] ist immer wahr (Tautologie), unabhängig davon, wohin der Zeiger zeigt. Der Standard definiert zeiger[index] äquivalent zu *(zeiger+index). &zeiger[0] ist daher äquivalent zu &*zeiger, wobei sich & und * quasi wegkürzen.
Cachus schrieb:
Ersteres gibt nicht die adresse von argv aus, sondern die vom inhalt von argv.
Die Adresse von argv ist eigentlich noch weniger interessant.