Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

__stdcall*

Treue Seele

  • »__stdcall*« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

1

16.08.2005, 19:30

void* Pointer wozu?

Tach Leute,

Ich hab mal ne Frage:

Wozu brauch ich in C++ eigentlich einen void* Pointer?
und wie kann ich ihn mit Daten füllen?
des einzige was ich mit denen kann ist mit malloc Speicher zuweißen :(
also:

void* pPointer = malloc(1024);

Kann mir des mal bitte einer erklären wie ich diese dinger richtig benutze

Gruß __stdcall*

2

16.08.2005, 20:09

Ich benutz das für Parameter bei Funktionen. Für den kann man dann Variablen beliebiges Datentypes einsetzen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
void Func(void *pPtr)
{

}

int main()
{
char c;
Func((void*)c);
return 0;
}
Mein Projekt: Rise of the Sylvan

__stdcall*

Treue Seele

  • »__stdcall*« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

3

16.08.2005, 20:30

HI,
Danke für deine schnelle antwort :)

also, ich kann den allokierten Bereich den ich als void* pointer erstellt hab mit einem Belibigen Datentyp (char usw.) durch casting
int (void*) füllen ist das so weit richtig?

kann ich void* auch als puffer benutzen??

und kann ich einem void* eine Adresse zuweißen

void* pPtr = 0x12345678

geht das ?

bin nämlich noch anfänger ;)

Gruß __stdcall*

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

16.08.2005, 20:39

void* steht für einen Zeiger auf ihrgendein Speicherbereich. Ob das nun char, int, long oder sonstewas ist. Da man da rumcastet ist die Gefahr groß, das ein Fehler auftritt. Daher sollte man solche Zeiger möglichst vermeiden und spezielle Zeiger nehmen. Da wo verschiedene Typen übergeben werden können nutzt man dann halt tamplates oder void Zeiger, wobei ich mehr zu void tendiere ;), aber das nur so am Rande.

Einfach Bereiche zuweisen sollte man nie machen!!!
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

__stdcall*

Treue Seele

  • »__stdcall*« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

5

16.08.2005, 20:57

thx für die Antworten,

ich glaub ich bin irgendwie zu blöd für void*,

C-/C++-Quelltext

1
void* pPointer = malloc(1024);


wenn ich den Pointer so erstelle das ich ihm gleich 1024 Bytes spendiere
wie kann ich diesen Speicher dann füllen??
Ich möchte in Diesem Speicherbereich z.b eine Struktur speichern
irgendwie peil ich nix ???

P.S : Ich will euch net nerven durch meine unwissenheit

Gruß __stdcall*

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

16.08.2005, 21:04

Um diesen 1024 großen Buffer als struktur zu "nutzten", muss man nur den Zeiger casten. z.B: (POSITION*)pPointer
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

__stdcall*

Treue Seele

  • »__stdcall*« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

7

16.08.2005, 21:17

Ah jetz hab ichs *hoffentlich* gefressen,
wenn ich den platz für eine struct nutzen möchte muss ich den
pointer nur in (myStruct*) casten

Also quasi so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
// Struktur erzeugen

struct SMyStruct
{
    int iWert1;
    int iWert2;
};

// Speicher reservieren

void* pPointer = malloc(1024);

// Struktur erzeugen

SMyStruct* pMyStruct = (SMyStruct*)pPointer;


danke, danke, danke

gruß __stdcall*

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

16.08.2005, 21:22

Eigentlich ist das Quatsch.

Voids sind nciht dazu da. Void Zeiger (void*) sind für Funktionen da, wo man den Typ einer Variable nicht kennt (z.b. Bei Speicher Verwaltungs Funktionen).

wenn man den so benutzt wie du kann man gleich machen:

Quellcode

1
MyStruct ms= malloc(sizeof(MyStruct) * ArraySize);


das wäre auch noch syntaktisch richtig. Den wer sagt den das MyStruct genau einen Byte groß ist, und nicht 4 oder 16? Das hängt von der Struktur an sich selber ab. wenn du

Quellcode

1
2
3
4
5
6
7
8
9
10
11
struct MyStruct
{
char a;
};

struct MyStruct2
{
char a;
char b;
char c;
};


Versteht sich wohl von selber das Struct 2 größer ist....

Weiterhin wir void nur in C gebraucht in C++ wurde es durch templates ersetzt, soweit ich weiss.

Anonymous

unregistriert

9

16.08.2005, 21:35

danke, jetz ist mir das klar,
aber bei dem Code:

Quellcode

1
SMyStruct ms= malloc(sizeof(SMyStruct) * ArraySize );



meckert der Vc++ 6.0 Compiler wie folgt:

void *' kann nicht in 'struct SMyStruct' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig

wieso dass denn du sagtest ja es sei dann syntaktisch richtig (ich hab noch net soo viel erfahrung in c++)

gruß __stdcall*

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

16.08.2005, 21:37

1. Muss man dann den Kram in nen Strukturzeiger casten, 2. macht das wenig Sinn, da new in diesem Falle um einiges Praktischer ist ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige