2 simple fragen
-
hallo zusammen
2 simple fragen.
1. pointer:
ich habe mir gerade folgenden artikel durchgelesen:
http://www.codeproject.com/KB/cpp/pointers.aspxwenn ich nun bspw folgende funktion habe:
static void Foo(int &myInt);Wenn ich innerhalb dieser Funktion
*myInt = 3mache, ändert sich die Variable ja auch ausserhalb.
beimyInt = 3ändert sie sich nicht, ist das so richtig?
wie kann ich einem WORD (unsigned short int) einen Binärwert zuweisen?
in ADA würde dies ja folgendermassen aussehen:var := 2#0000_0000_1110_1000#;
- oniwa
-
Kurze Antwort:
1. nein, nicht richtig
2. ist nicht direkt in der Syntax vorgesehenLange Antwort:
1. Du hast Pointer leider nicht verstanden.
int &myIntdefiniert nicht etwa ein Pointer sondern eine Referenz. Ein Pointer wäreint *myInt. Aber selbst dann ist dir offenbar das Konzept hinter Pointern nicht richtig klar.myIntund*myIntsind völlig andere Sachen, das eine ist der Pointer selbst, das andere das Objekt, auf das er zeigt. Mit nach außen ändern oder nicht hat das nichts zu tun.2. Am einfachsten kommst du wohl, wenn du die Literale (es geht ja sowieso nur um Literale) einfach umrechnest (so viele werden es ja nicht sein). Ansonsten gibt es z.B. bei boost::utility das Makro
BOOST_BINARY.
-
oniwa schrieb:
hallo zusammen
2 simple fragen.
1. pointer:
ich habe mir gerade folgenden artikel durchgelesen:
http://www.codeproject.com/KB/cpp/pointers.aspxwenn ich nun bspw folgende funktion habe:
static void Foo(int &myInt);Wenn ich innerhalb dieser Funktion
*myInt = 3mache, ändert sich die Variable ja auch ausserhalb.
beimyInt = 3ändert sie sich nicht, ist das so richtig?
Beides falsch. Bei
*myInt=3würdest du den Wert von myInt nicht ändern, sondern den Wert auf den myInt zeigt. Da myInt aber hier kein Zeiger ist, wird dies gar nicht erst compilieren. BeimyInt=3würdest du die Variable auch außerhalb ändern, denn myInt ist eine Referenz. Kann es sein, dass du hier Referenzen und Zeiger durcheinanderwirfst? Denn wenn der funktionskopf so aussähe:static void Foo(int *myInt);, dann würden deine Aussagen stimmen.*myInt=3würde dann den Wert der Variable ändern, auf die myInt zeigt. UndmyInt=3würde bloß den Wert des Zeigers auf 3 setzen, was die Variable auf die er vorher gezeigt hat unbeeeinflusst lässt aber insegesamt nicht viel Sinn macht.
Ich empfehle dir, dir aber erst einmal Referenzen anzugucken. Das ist leichter zu verstehen und sie leisten fast genau das gleiche wie Pointer.wie kann ich einem WORD (unsigned short int) einen Binärwert zuweisen?
in ADA würde dies ja folgendermassen aussehen:var := 2#0000_0000_1110_1000#;
Als Literal gar nicht. Du könntest dir zwar leicht eine Funktion zum Umrechnen schreiben (mit Templates sogar während der Compilezeit), aber einfacher wäre es wohl, einfach
var = 232;zu schreiben.
-
Salute,
nochmal zur 1. Frage.
Dass ich mit & eine Referenz angebe, ist mir schon klar.
Nur, mit * sollte ich dann doch auf den Speicherbereich zeigen..?
-
zu 1:
*myint = 3;Ändert den Integerwert der Variablen auf die myint zeigt. (Dereferenzieren)
myint = 3;Wird dir wahrscheinlich einen Compilererror einbringen da Du einem Zeiger nicht einen int wert zuweisen kannst.... Zeiger braucht eine Adresse.
zu 2:
Du kannst einen Hexwert zuweisen:
myshort = 0x00e8;gruß muli
-
oniwa schrieb:
Salute,
nochmal zur 1. Frage.
Dass ich mit & eine Referenz angebe, ist mir schon klar.
Nur, mit * sollte ich dann doch auf den Speicherbereich zeigen..?Ich verstehe die Frage nicht. Was soll zeigen? Du? Und auf welchen Speicherbereich?
Ich entnehme der Frage, dass du vermutlich weder Referenzen noch Pointer verstanden hast.
-
unsigned long aDec = std::bitset("0000000011101000").to_ulong();Ist aber ein Overkill.
-
oniwa schrieb:
Salute,
nochmal zur 1. Frage.
Dass ich mit & eine Referenz angebe, ist mir schon klar.
Nur, mit * sollte ich dann doch auf den Speicherbereich zeigen..?Eine Referenz benutzt du genauso wie eine normale Variable. Du KANNST sie nicht dereferenzieren. Beispiel:
#include <iostream> void change(int &y) { y = 5; } int main() { int x = 3; change(x); //weil hier eine Referenz genommen wird ist y effektiv die gleiche Variable wie x // (bzw. zeigt auf x aber du musst nix machen) //und daher wird die 5 auch in x gesetzt cout << x << endl; //und hier wird dann auch 5 ausgegeben. }Nehmen wir das gleiche mit Pointern:
#include <iostream> void change(int *y) //hier Pointer!! { *y = 5; //du musst die 5 an die Adresse schreiben, auf die y zeigt //y = (int*)5 würde dazu führen, dass y auf das 5. Byte im Speicher zeigt und das is Blödsinn } int main() { int x = 3; change(&x); //hier musst du die Adresse angeben, bei der Referenz nicht //so und hier passiert dann das gleiche //und daher wird die 5 auch in x gesetzt cout << x << endl; //und hier wird dann auch 5 ausgegeben. }