Gegeben ein Zeiger auf int
, wie kann ich die tatsächliche int
erhalten?Wie int * in int zu konvertieren
Ich weiß nicht, ob das möglich ist oder nicht, aber kann mir bitte jemand raten?
Gegeben ein Zeiger auf int
, wie kann ich die tatsächliche int
erhalten?Wie int * in int zu konvertieren
Ich weiß nicht, ob das möglich ist oder nicht, aber kann mir bitte jemand raten?
Verwenden Sie die * auf Zeiger verwenden die Variable spitz (dereferencing) zu erhalten.
int val = 42;
int* pVal = &val;
int k = *pVal; // k == 42
Wenn Sie den Mauszeiger auf ein Array, dann sind Sie das erste Element des Arrays dereferencing geben.
Wenn Sie den „Wert“ des Zeigers wollen, dh die tatsächliche Speicheradresse der Zeiger enthält, warf sie dann (aber es ist im Allgemeinen keine gute Idee):
int pValValue = reinterpret_cast<int>(pVal);
die Dereferenzierungsoperator *
z
void do_something(int *j) {
int k = *j; //assign the value j is pointing to , to k
...
}
Dies beantwortet die Frage nicht. – Danvil
Das int * j wurde in int k konvertiert. Das scheint die Frage zu beantworten. – CiscoIPPhone
Verwenden * zu dereferenzieren der Zeiger:
int* pointer = ...//initialize the pointer with a valid address
int value = *pointer; //either read the value at that address
*pointer = value;//or write the new value
Dies beantwortet die Frage nicht. – Danvil
Warum die d/v auf diese Antwort? –
Ja, das verstehe ich auch nicht. – sharptooth
ich bin, wenn ich, was Sie wollen nicht 100% sicher verstehen:
int a=5; // a holds 5
int* ptr_a = &a; // pointing to variable a (that is holding 5)
int b = *ptr_a; // means: declare an int b and set b's
// value to the value that is held by the cell ptr_a points to
int ptr_v = (int)ptr_a; // means: take the contents of ptr_a (i.e. an adress) and
// interpret it as an integer
Hop Das hilft.
Sie sollten genau unterscheiden, was Sie wollen: Darsteller oder Dereferenzierung?
int x = 5;
int* p = &x; // pointer points to a location.
int a = *p; // dereference, a == 5
int b = (int)p; //cast, b == ...some big number, which is the memory location where x is stored.
Sie können immer noch int direkt auf einen Zeiger zuweisen, dereferenzieren es einfach nicht, wenn Sie wirklich wissen, was Sie tun.
int* p = (int*) 5;
int a = *p; // crash/segfault, you are not authorized to read that mem location.
int b = (int)p; // now b==5
Sie können ohne die explizite Casts tun (int)
, (int*)
, aber Sie werden höchstwahrscheinlich Compiler-Warnungen erhalten.
Wenn Sie den vom Zeiger angezeigten Wert abrufen müssen, ist das keine Konvertierung. Sie einfach den Zeiger dereferenzieren und ziehen Sie die Daten:
int* p = get_int_ptr();
int val = *p;
Aber wenn Sie wirklich den Zeiger auf einen int umwandeln müssen, dann müssen Sie werfen. Wenn Sie denken, dass Sie das wollen, denken Sie noch einmal darüber nach. Es ist wahrscheinlich nicht. Wenn Sie Code geschrieben haben, der dieses Konstrukt erfordert, müssen Sie über ein Redesign nachdenken, da dies offensichtlich unsicher ist. Trotzdem:
int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);
+1 für explizit erwähnen, dass keine Konvertierung stattfindet. –
Sie sagten, Sie sind nicht sicher, ob das möglich ist. Bedenken Sie: Wenn das nicht möglich wäre, was würde dann ein Zeiger verwenden? –
krank zugeben, es war eine dämliche Frage – paultop6