Jan H. schrieb:> Bei der Zweiten meckert der Compiler rum.
Wie denn? Was denn?
> Bei der Zweiten meckert der Compiler rum. Wieso?
Weil das Ergebnis der zweiten Addition ein Pointer ist und du diesen
Pointer in einem char zurückgeben willst. Und weil es eigentlich sinnlos
ist, zwei Pointer zu addieren...
Was sollte denn das Ziel der zweiten Operation sein?
Jan H. schrieb:> Wieso?
Weil du anderen (falschen Code) schreibst.
Erstes: void pointer wird nach unsigned int gecastet und dann passend
dereferenziert und verrechnet.
Im zweiten code, dereferenzierst du einen void Pointer. Der Compiler
weiß gar nicht, was für ein Datentyp das genau ist. Und dann castest du
das in einen pointer auf einen unsigned int. da stimmt einfach die
Reihenfolge, wie du bereits bemerkt hast, nicht.
Deine erste Funktion liefert einen unsigned char zurück. Gerechnet wird
aber mit unsigned ints. Das ist nicht so schön. eigentlich sollte der
Compiler da auch 'ne Warnung ausspucken.
Bei der ersten Funktion weist du den Compiler an es zu einem unsigned
int pointer um zu casten und diesen dann zu dereferenzieren.
Bei der zweiten Funktion versuchst du zu erst den void pointer zu
dereferenzieren und diesen inhalt auf einen unsigned int pointer zu
casten.
Nichts desto trotz beide return Werte sind unsigned char was in keinem
Fall ein unsigned int sein kann bzw. ein unsigned int pointer (abhängig
von der Architektur).
Viele Grüße
Jan H. schrieb:> Peter II schrieb:>> Jan H. schrieb:>>> Wieso ist das addieren "sinnlos"?>>>> was soll denn rauskommen, wenn man 2 Pointer addiert?>> Der Inhalt?
Es weiß doch wohl jeder, dass das Ergebnis in jedem Fall 42 ist.
M. H. schrieb:> Jan H. schrieb:>> Peter II schrieb:>>> Jan H. schrieb:>>>> Wieso ist das addieren "sinnlos"?>>>>>> was soll denn rauskommen, wenn man 2 Pointer addiert?>>>> Der Inhalt?>> Es weiß doch wohl jeder, dass das Ergebnis in jedem Fall 42 ist.
Sorry. 42?
Jan H. schrieb:> Wieso ist das addieren "sinnlos"?
Ein Pointer ist eine Adresse.
Ein Index auf eine Adresse macht Sinn:
"Herrmannstraße 1 in Hamburg + 3 Häuser weiter"
Eine Subtraktion von Adressen macht noch manchmal Sinn, wenn die Adresse
denselben Bezugspunkt hat, das Ergebnis ist ein Index:
"Herrmannstraße 21 in Hamburg - Herrmannstraße 7 in Hamburg"
Aber eine Addition von Adressen ergibt kein definiertes Ergebnis:
"Herrmannstraße 1 in Hamburg + Schöffelstraße 19 in Kassel"
Gruß, Stefan
Stefan K. schrieb:> Jan H. schrieb:>> Wieso ist das addieren "sinnlos"?>> Ein Pointer ist eine Adresse.>> Ein Index auf eine Adresse macht Sinn:> "Herrmannstraße 1 in Hamburg + 3 Häuser weiter">> Eine Subtraktion von Adressen macht noch manchmal Sinn, wenn die Adresse> denselben Bezugspunkt hat, das Ergebnis ist ein Index:> "Herrmannstraße 21 in Hamburg - Herrmannstraße 7 in Hamburg">> Aber eine Addition von Adressen ergibt kein definiertes Ergebnis:> "Herrmannstraße 1 in Hamburg + Schöffelstraße 19 in Kassel">> Gruß, Stefan
Das war der Test. Das Ergebnis passt.
Jan H. schrieb:> Das war der Test.
Wofür? Was wolltest du da testen?
> Das Ergebnis passt
Logisch, du addierst da ja auch keine Pointer, sondern das, worauf die
zeigen:
1
return*(unsignedchar*)x+=*(unsignedchar*)y;
BTW: "casting Frage C"
Im Codepad muss ich dafür C++ auswählen: http://codepad.org/Yk4t3cTx
Welchen Compiler verwendest du, dass das C ist?
Lothar M. schrieb:> Jan H. schrieb:>> Das war der Test.> Wofür? Was wolltest du da testen?>
Einfach um ein bisschen besser in C rein zu kommen.
> BTW: "casting Frage C"> Im Codepad muss ich dafür C++ auswählen: http://codepad.org/Yk4t3cTx> Welchen Compiler verwendest du, dass das C ist?
Ich benutze DevC++
Jan H. schrieb:> Ich benutze DevC++
Die Frage war welcher Compiler... nicht welche IDE. Und selbst da hast
du keine genaue Angabe gemacht damit man sich das zur Not selber
raussuchen kann (Bundle).
Dennis S. schrieb:> Jan H. schrieb:>> Ich benutze DevC++>> Die Frage war welcher Compiler... nicht welche IDE. Und selbst da hast> du keine genaue Angabe gemacht damit man sich das zur Not selber> raussuchen kann (Bundle).
Ahja.. Sorry!
TDM-GCC 4.9.2