void*
-
Hi,
wer kann mir weiterhelfen?
ich erhalte bei folgendem Pogrammabschnitt immer eine Fehlermeldung:
[code]
void bubblesort_2(void* feld, size_t anzahl,size_t width, int (*fncompare)(void*, void*))
{
int i,j,swapped;
i=anzahl;
do
{
swapped=FALSE;
for(j=0;j<i-1;j++)
{if ((*fncompare)(&feld[j],&feld[j+1]) >0) ***<-hier
{
swap2(feld,j,j+1);
swapped=TRUE;
}
}
i--;
}while(swapped);
}mfg
pierre[/code]
-
Nachtrag:
Fehlermeldung : 2-mal : Unbekannte Größe
mfG
pierre
-
void-Zeiger kann man nicht dereferenzieren. Du musst zB mit char* arbeiten und immer um 'width' Stellen vorrücken, wenn Du es gerne so allgemein hast (oder ein Makro nehmen).
-
@Daniel E,
vielen Dank;
insbesondere mit der Idee, den Char-typ zu verwenden.
Damit klappt es hervorragend.
mfg
pierre
-
hi,
ich habe in diesem Zusammenhang die nächste Frage:
Warum funktioniert die Dereferenzierung von void* problemlos mit GNU-Compiler
der DEV-C++-IDE, während der Microsseft-Compiler mir Fehler anzeigt????Meinen Quelltext habe ich in dieser Form schon mal gesehen u.z.
[url]
wwww.physik.uni-magdeburg.de/studium/edverg/ckurs/script/node46.html
[/url]Warum geht es mal so und mal so nicht??
mfg
pierre
-
wenn der GCC das dereferenzieren von void* erlaubt, dann liegt er falsch.
probiers mal mit
-std=c99 -pedantic
zusätzlich in der commandozeile - dann sollte er es nicht mehr akzeptieren.das Problem bei einem void* ist, dass er keine definierte größe hat.
soll er jetzt also 1 Byte, 2 Byte oder gar 10 Byte nehmen? er weiß es nicht. (niemand weiß es)
für 1 Byte Zeiger gibt es char*
-
Hi,
nur warum ist dies zulässig:
in der <stdlib.h> qsort:
void qsort ( void * base,
size_t num, size_t width,
int (*fncompare) (const void *, const void ); ??ich blick da noch nicht durch.
mfG
pierre
-
was ist daran unverständlich?
-
Hi,
das erste Argument ist doch auch void* base, d.h. ein Pointer auf ein Array;
dies muss doch auch dereferenziert werden, um damit weiter arbeiten zu können.mfg
pierre
-
Original erstellt von <du_c>:
*das erste Argument ist doch auch void base, d.h. ein Pointer auf ein Array;
dies muss doch auch dereferenziert werden, um damit weiter arbeiten zu können.
**lies mal die Doku zu qsort.
mit width (oder of auch size genannt) gibst du die größe eines 'Objektes' an.
in qsort wird dann mit char* gearbeitet um immer exakt width bytes weiter zu gehen.
void* wird deshalb verwendet, weil sich jeder zeiger in einen void* umwandeln lässt, ohne explizit casten zu müssen (ausserdem wäre es semantisch falsch char* zu verwenden)