Как преобразовать интервал* в интервал

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

Я не знаю, возможно ли это или нет, но кто-то может советовать мне?

16
задан Toby Speight 4 December 2015 в 11:23
поделиться

6 ответов

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

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

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

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

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

int pValValue = reinterpret_cast<int>( pVal );
41
ответ дан 30 November 2019 в 15:18
поделиться

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

void do_something(int *j) {
    int k = *j; //assign the value j is pointing to , to k
    ...
}
4
ответ дан 30 November 2019 в 15:18
поделиться

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

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

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

int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);
8
ответ дан 30 November 2019 в 15:18
поделиться

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

  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 *) , но вы, скорее всего, получите предупреждения компилятора.

2
ответ дан 30 November 2019 в 15:18
поделиться

Я не уверен на 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'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

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

5
ответ дан 30 November 2019 в 15:18
поделиться

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

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
1
ответ дан 30 November 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: