Dato un puntatore a int
, come è possibile ottenere l'attuale int
?Come convertire int * in int
Non so se è possibile o no, ma qualcuno può consigliarmi?
Dato un puntatore a int
, come è possibile ottenere l'attuale int
?Come convertire int * in int
Non so se è possibile o no, ma qualcuno può consigliarmi?
Utilizzare il * su puntatori per ottenere variabile puntata (dereferenziazione).
int val = 42;
int* pVal = &val;
int k = *pVal; // k == 42
Se il puntatore punta a un array, il dereferenziamento fornisce il primo elemento dell'array.
Se si desidera che il "valore" del puntatore, che è l'indirizzo di memoria effettivo il puntatore contiene, poi gettato esso (ma non è generalmente una buona idea):
int pValValue = reinterpret_cast<int>(pVal);
utilizzare l'operatore dereference *
es
void do_something(int *j) {
int k = *j; //assign the value j is pointing to , to k
...
}
Questo non risponde alla domanda. – Danvil
L'int * j è stato convertito in int k. Questo sembra rispondere alla domanda. – CiscoIPPhone
Usa * a dereference il puntatore:
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
Questo non risponde alla domanda. – Danvil
Perché il d/v su questa risposta? –
Yeap, non capisco neanche questo. – sharptooth
io non sono sicuro al 100% se ho capito quello che vuoi:
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 questo aiuta.
È necessario differenziare rigorosamente ciò che si desidera: cast o dereferenziazione?
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.
È ancora possibile assegnare int direttamente a un puntatore, basta non dereferenziarlo meno che non si davvero sai quello che stai facendo.
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
si può fare senza i cast espliciti (int)
, (int*)
, ma è molto probabile ottenere avvisi del compilatore.
Se è necessario ottenere il valore puntato dal puntatore, non si tratta di conversione. È sufficiente dereference il puntatore e tira fuori i dati:
int* p = get_int_ptr();
int val = *p;
Ma se si realmente necessario convertire il puntatore a un int, allora avete bisogno di lanciare. Se pensi che questo sia ciò che vuoi, ripensaci. Probabilmente no. Se hai scritto un codice che richiede questo costrutto, allora devi pensare a una riprogettazione, perché questo è chiaramente non sicuro. Tuttavia:
int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);
+1 per menzionare esplicitamente che non si sta verificando alcuna conversione. –
Hai detto che non sei sicuro se è possibile. Considera: se ciò non fosse possibile, quale sarebbe l'uso di un puntatore? –
ammettere che era una domanda stupida – paultop6