Zeiger auf Zeiger
-
Hallo,
bin c++ Anfänger und habe folgendes code Beispiel:
int scmp(const void *a, const void *b) {
char *pa = *(char**)a;
char *pb = *(char**)b;
return strcmp(pa,pb);
}
Ok ich verstehe, dass Zeiger auf void in Zeiger auf char umgewandelt wird. Dazu benötigt man beim Casten die Adresse von char und beim Zuweisen. Hier verstehe ich nicht, warum man einen Zeiger auf einen char Zeiger benötigt.
ich hätte:
char *pb = *(char*)b;was nicht funktioniert, aber warum?
strcmp ist nirgendwo deklariert, kommt die Funktion aus der header <cstdlib>?
Und dann 2. Verständnisproblem
codereturn ia > ib ? 1 : -1;
Bedeutet das, dass bei ia > ib 1 zurückgegeben wird sonst -1?
Hoffe, dass es mir jemand erklären kann.
Vielen Dank im Vorraus.
-
char *pa = *(char**)a;Das ist doppelt gemoppelt.
Durch die Dereferenzierung(das ist das Sternchen vor der Klammer) machst du aus dem char** wieder nen char* .
Deine Variantechar *pb = *(char*)b;funktioniert nicht weil du,das nach char* gecastete b dereferenzierst wodurch du nen char bekommst und dieses dem char* zuweisen möchtest.
char *pb = (char*)b;oder
char *pb = static_cast<char*>(b);sind die Wege zum Glück

EDIT:Dein 2. Problem hast du richtig erkannt.
Gruß Spacelord
-
Ich sage es nun mal in aller Deutlichkeit, für alle die zur Zeit keine oder nur wenig, wie es sich ja in anderen Threads und auch anderen Foren, bereits gezeigt hat, aber nie wirklich aussagekräftig erklärt wurde, dass es von, ich nenne sie jetzt einfach einmal Kollegen, bereits zum Ausdruck gebracht wurde, es so nicht umgesetzt werden kann. Deshalb braucht es, wie ich schon in früheren Beiträgen schon erwähnte, eine deutliche Änderung der Vorgehensweise, damit das Problem in Zukunft nicht mehr auftritt.
-
Endlich mal jemand der sich dieses Problems annimmt
und es auch klar auf den Punkt bringt!
-
void test(void **p) { ... } int main() { int *ptr; void test((void**)&ptr); <--- ist diese zeiche gleich der nächsten zeile? void test(&ptr); <---
-
Ich sage es nun mal in aller Deutlichkeit, für alle die zur Zeit keine oder nur wenig, wie es sich ja in anderen Threads und auch anderen Foren, bereits gezeigt hat, aber nie wirklich aussagekräftig erklärt wurde, dass es von, ich nenne sie jetzt einfach einmal Kollegen, bereits zum Ausdruck gebracht wurde, es so nicht umgesetzt werden kann. Deshalb braucht es, wie ich schon in früheren Beiträgen schon erwähnte, eine deutliche Änderung der Vorgehensweise, damit das Problem in Zukunft nicht mehr auftritt.
Spitze!
