Как преобразовать int * в int

Учитывая указатель на int, как я могу получить фактический int?

Я не знаю, возможно ли это или нет, но может ли кто-нибудь проконсультировать меня?

Ответы

Ответ 1

Используйте указатели * для указания переменной (разыменование).

int val = 42;
int* pVal = &val;

int k = *pVal; // k == 42

Если ваш указатель указывает на массив, то разыменование даст вам первый элемент массива.

Если вы хотите "значение" указателя, то есть фактический адрес памяти, который содержит указатель, затем произведите его (но это вообще не очень хорошая идея):

int pValValue = reinterpret_cast<int>( pVal );

Ответ 2

Если вам нужно получить значение, указанное указателем, то это не преобразование. Вы просто разыгрываете указатель и извлекаете данные:

int* p = get_int_ptr();
int val = *p;

Но если вам действительно нужно преобразовать указатель в int, тогда вам нужно сделать бросок. Если вы думаете, что это то, что вы хотите, подумайте еще раз. Вероятно, нет. Если вы написали код, требующий этой конструкции, вам нужно подумать о редизайне, потому что это явно небезопасно. Тем не менее:

int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);

Ответ 3

Я не уверен на 100%, если я понимаю, чего вы хотите:

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 
                 // 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

Надеюсь, что это поможет.

Ответ 4

используйте оператор разыменования * e.g

void do_something(int *j) {
    int k = *j; //assign the value j is pointing to , to k
    ...
}

Ответ 5

Вы должны четко отличать то, что хотите: литье или разыменование?

  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.

Вы все же можете назначить int непосредственно указателю, просто не разыщите его, если вы действительно не знаете, что делаете.

  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

Вы можете обойтись без явных приемов (int), (int*), но вы, скорее всего, получите предупреждения компилятора.

Ответ 6

Используйте * для разыменования указателя:

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