Dado un puntero a int
, ¿cómo puedo obtener el int
real?Cómo convertir int * a int
No sé si esto es posible o no, pero alguien puede por favor asesorarme?
Dado un puntero a int
, ¿cómo puedo obtener el int
real?Cómo convertir int * a int
No sé si esto es posible o no, pero alguien puede por favor asesorarme?
Uso del * sobre los punteros para obtener la variable señalado (eliminación de referencias).
int val = 42;
int* pVal = &val;
int k = *pVal; // k == 42
Si su puntero apunta a una matriz, desreferenciando le dará el primer elemento de la matriz.
Si desea que el "valor" del puntero, que es la dirección de memoria real del puntero contiene, entonces echó (pero no es generalmente una buena idea):
int pValValue = reinterpret_cast<int>(pVal);
uso, el usuario desreferenciar *
por ejemplo
void do_something(int *j) {
int k = *j; //assign the value j is pointing to , to k
...
}
Esto no responde la pregunta. – Danvil
El int * j se ha convertido a int k. Eso parece responder la pregunta. – CiscoIPPhone
Usar para eliminar la referencia al puntero:
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
Esto no responde la pregunta. – Danvil
¿Por qué el d/v en esta respuesta? –
Yeap, tampoco entiendo eso. – sharptooth
no estoy 100% seguro si entiendo lo que quiere:
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 e esto ayuda.
Debe diferenciar estrictamente lo que desea: ¿lanzamiento o desreferencia?
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.
Todavía se puede asignar int directamente a un puntero, simplemente no eliminar la referencia a menos que realmente sabe lo que está haciendo.
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
se puede hacer sin las conversiones explícitas (int)
, (int*)
, pero lo más probable es obtener las advertencias del compilador.
Si necesita que el puntero señale el valor, entonces eso no es una conversión. Sólo tiene que eliminar la referencia al puntero y saca los datos:
int* p = get_int_ptr();
int val = *p;
Pero si realmente necesita para convertir el puntero a un int, entonces usted necesita para echar. Si crees que esto es lo que quieres, piénsalo de nuevo. Probablemente no. Si escribió el código que requiere este constructo, entonces debe pensar en un rediseño, porque esto es claramente inseguro. Sin embargo:
int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);
+1 por mencionar explícitamente que no está ocurriendo ninguna conversión. –
Dijiste que no estás seguro si eso es posible. Considere: si eso no fuera posible, ¿cuál sería el uso de un puntero? –
admitir que fue una pregunta tonta – paultop6