Как привести пустой указатель к указателю при разыменовании? - PullRequest
0 голосов
/ 19 февраля 2011
int x = 5;
int *xPtr = &x;
void **xPtrPtr = &xPtr;
printf("%d\n", *(int*)*xPtrPtr);

У меня есть пустой указатель, указывающий на int-указатель. Каков синтаксис для правильного приведения пустого указателя, когда я хочу разыменовать? Приведенный выше код завершается с:

error: invalid conversion from ‘int**’ to ‘void**’

Спасибо!

Ответы [ 5 ]

4 голосов
/ 19 февраля 2011

Для пустых указателей вам не нужно знать, сколько существует косвенных указателей.

#include <iostream>
int main(void){
    int x = 5;
    int* pX = &x;
    void* pV = &pX;
    std::cout << "x = " << **(int**)pV << std::endl;
    // better use C++-Style casts from the beginning
    // or you'll be stuck with the lazyness of writing the C-versions:
    std::cout << "x = " << **reinterpret_cast<int**>(pV) << std::endl;
    std::cin.get();
}

Выход:

x = 5
x = 5

Смотрите здесь .

0 голосов
/ 20 февраля 2011

Это правильно компилируется:

#include <stdio.h>

int main(int argc, char *argv[]) {
   int x = 57; 
   int *xPtr = &x; 
   void **xPtrPtr = (void**)&xPtr; 
   printf("%d\n", *((int*)*xPtrPtr));
}
0 голосов
/ 19 февраля 2011
void **xPtrPtr = (void**)&xPtr;
0 голосов
/ 19 февраля 2011
    int x = 5;
    int *xPtr = &x;
    void **xPtrPtr = reinterpret_cast<void**>(&xPtr);
    int y = **reinterpret_cast<int**>(xPtrPtr);
    cout << y;

Компиляция: без ошибок. Без предупреждения!

Выход:

5

Код на ideone: http://www.ideone.com/1nxWW

0 голосов
/ 19 февраля 2011

Указатель на int равен *((int **)xPtrPtr)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...