-
malloc bekommt, wie du ja weißt, nur die Byteanzahl, die es besorgen soll.
Wenn das 16 ist, können das zB. 16 chars (je 1 Byte), oder 2 doubles (je 8 Byte) sein.
Und weil malloc nicht weiß, welche Variablenart das wird (und sich dafür auch überhaupt nicht interessiert), liefert es nur die Adresse. Kein char* oder double*, sondern einheitlich
(void*: Adresse von unbestimmter Variablenart).
Wenn man dieses void* dann einem double* oÄ. zuweist, kann (nur kann) das
je nach Compiler eine Warnung bringen. Das Programm funktioniert trotzdem,
aber die Warnung ist lästig. Deswegen der Cast, um die zu verhindern.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
16.12.11 18:41 #47
- Registriert seit
- Jun 2011
- Beiträge
- 76
Danke dir.
Code cpp:1
arrayValues=(double *)malloc(sizeof(complex)* *len);
EDIT:
Das ist verwirrend... der Stern ist erst nach der ) und beim len ist der stern eh normal vorm len.
Was macht der Stern den nach ')'?Geändert von Googlehupf (16.12.11 um 18:48 Uhr) Grund: Löschen/Ergänzung
-
Stimmt.
Je nach Compiler können es auch mal mehr als 16 Byte sein,
aber das hat auf den Code keine Auswirkungen.
Kein Grund zum Sorgenmachen,
edit: Der erste Stern ist das math. Multiplizieren,
der zweite wegen dem Pointer, um nicht die Adresse, sondern den Wert selbst zu bekommen.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
16.12.11 20:40 #49
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
Expliziter Cast bedeutet, das wir dem Compiler mitteilen, das wir ihn zwingen, dort einen bestimmten Typen zu verwenden.
Ein Void-Pointer ist für den Compiler etwas anderes als ein Pointer auf eine Struktur. Da du als L-Wert einen Pointer auf eine Struktur hast, als R-Wert von malloc() aber ein Void-Pointer zurück kommt, zwingen wir (casten) zum Datentypen Pointer auf Struktur.
Prinzipiell ist es bei einem Void-Pointer egal, ob man ihn explizit castet oder nicht. Der Compiler wird sich darum kümmern, dass dies implizit (also ohne Zwang durch den Programmierer) geschieht. Es ist aber sauberer, und wenn man nach ISO-89 compiliert (wenn ich mich richtig erinnere) wird der Code dadurch auch besser zu verstehen, denn:
In ISO-89 (man vergebe mir bitte, wenn ich das falsch in Erinnerung habe) müssen die Variablen vor dem eigentlichen Programm-Code definiert werden. Das sieht das bspw. so aus, wie du es in deinem letzten Post gemacht hast. Erst kommen die Variablen, dann der logische Code. Wenn man eine Latte von Variablen definiert hat, und anschließend ein paar Zeilen Code kommen, und später erst die Speicher-Allokation, dann muss man immer im Sourcecode nach oben zur Variablen-Definition scrollen, um zu prüfen, auf welchen Typ denn nun der Pointer eigentlich zeigt.
Solltest du keinen expliziten Cast durchführen, bekommst du bim Compilen eine Warnung.
Hier habe ich noch mal eine Seite raus gesucht, in der die Einzelheiten erklärt werden: http://www.willemer.de/informatik/cpp/pointer.htmGrüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Wert per php aus tabelle abfragen wenn wert erreicht soll spalte 2 um eines erhöht
Von bastiekleve im Forum PHPAntworten: 64Letzter Beitrag: 17.12.10, 20:23 -
[C#] In ListBox soll jeder Wert einmalig sein
Von RescueThePinguins im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 07.01.10, 22:56 -
Linker Balken, soll bis nach ganz unten gehen...
Von Darian im Forum CSSAntworten: 2Letzter Beitrag: 31.08.08, 03:02 -
DataGridView - Linker Grauer Bereich soll weg
Von Athor im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 20.11.07, 14:36 -
linker frame soll größe beibehalten.
Von sunflower84 im Forum HTML & XHTMLAntworten: 10Letzter Beitrag: 27.07.05, 16:00



31Danke


Zitieren

Login






