Étant donné un pointeur vers int
, comment puis-je obtenir le int
actuel?Comment convertir int * en int
Je ne sais pas si c'est possible ou non, mais quelqu'un peut-il me conseiller?
Étant donné un pointeur vers int
, comment puis-je obtenir le int
actuel?Comment convertir int * en int
Je ne sais pas si c'est possible ou non, mais quelqu'un peut-il me conseiller?
Utilisez le * sur les pointeurs pour obtenir pointu (déréférencement) la variable. Si votre pointeur pointe vers un tableau, alors le déréférencement vous donnera le premier élément du tableau.
Si vous voulez que la « valeur » du pointeur, qui est l'adresse réelle de la mémoire le pointeur contient, puis jeté (mais il est généralement pas une bonne idée):
int pValValue = reinterpret_cast<int>(pVal);
utiliser l'opérateur de déréférencement *
par exemple
void do_something(int *j) {
int k = *j; //assign the value j is pointing to , to k
...
}
Cela ne répond pas à la question. – Danvil
L'int * j a été converti en int k. Cela semble répondre à la question. – CiscoIPPhone
Utilisez * pour déréférencer la pointeur:
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
Cela ne répond pas à la question. – Danvil
Pourquoi le d/v sur cette réponse? –
Yeap, je ne comprends pas non plus. – sharptooth
Je ne suis pas sûr à 100% si je comprends ce que vous voulez:
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 Cela aide.
Vous devez différencier strictement ce que vous voulez: lancer ou déréférencer?
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.
Vous pouvez toujours attribuer int directement à un pointeur, il suffit de faire pas déréférencer à moins que vous vraiment savez ce que vous faites.
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
Vous pouvez faire sans les moulages explicites (int)
, (int*)
, mais vous obtiendrez très probablement les avertissements du compilateur.
Si vous avez besoin de la valeur pointée par le pointeur, alors ce n'est pas une conversion. Il vous suffit de déréférencer le pointeur et tirez sur les données:
int* p = get_int_ptr();
int val = *p;
Mais si vous vraiment besoin de convertir le pointeur vers un entier, alors vous devez jeter. Si vous pensez que c'est ce que vous voulez, détrompez-vous. Ce n'est probablement pas. Si vous avez écrit du code qui nécessite cette construction, vous devez penser à une nouvelle conception, car cela est manifestement dangereux. Néanmoins:
int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);
+1 pour explicitement mentionner aucune conversion qui se passe. –
Vous avez dit que vous n'êtes pas sûr que ce soit possible. Considérez: Si cela n'était pas possible, à quoi servirait un pointeur? –
mal admettre que c'était une question stupide – paultop6