1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Moin. Die erste Funktion, funktioniert. Bei der Zweiten meckert der Compiler rum. Wieso?
|
Anzeige
|
casting Frage C
Moin. Die erste Funktion, funktioniert. Bei der Zweiten meckert der Compiler rum. Wieso? 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?
Gast
#5201727
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. Das war jetzt eigentlich nur zum Verständnis. Die Funktionen brauche ich nicht, habe ich nur zum Lernen nachgebaut. Wieso ist das addieren "sinnlos"? 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
Gast
#5201733
Jan H. schrieb: > Wieso ist das addieren "sinnlos"? was soll denn rauskommen, wenn man 2 Pointer addiert? Peter II schrieb: > Jan H. schrieb: >> Wieso ist das addieren "sinnlos"? > > was soll denn rauskommen, wenn man 2 Pointer addiert? Der Inhalt?
Gast
#5201740
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.
Gast
#5201760
Jan H. schrieb: > Das war der Test. Das Ergebnis passt. aber nur durch ein zufall. mache mal
%d und char passt auch nicht wirklich. 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:
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 Peter II schrieb: > %d und char passt auch nicht wirklich Bei printf schon. Bei variadischen Funktionen wird mindestens ein int übergeben. https://de.wikipedia.org/wiki/Variadische_Funktion#C Da ist eher %d und unsigned problematisch. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|