int x = 5;
int *xPtr = &x;
void **xPtrPtr = &xPtr;
printf("%d\n", *(int*)*xPtrPtr);
intポインタを指すvoidポインタがあります。間接参照したいときにvoidポインターを適切にキャストするための構文は何ですか?上記のコードは次のように終了します。
error: invalid conversion from ‘int**’ to ‘void**’
ありがとうございました!
int x = 5;
int *xPtr = &x;
void **xPtrPtr = &xPtr;
printf("%d\n", *(int*)*xPtrPtr);
intポインタを指すvoidポインタがあります。間接参照したいときにvoidポインターを適切にキャストするための構文は何ですか?上記のコードは次のように終了します。
error: invalid conversion from ‘int**’ to ‘void**’
ありがとうございました!
void ポインターの場合、間接参照がいくつあるかを知る必要はありません。
#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
intへのポインタは*((int **)xPtrPtr)
これは正しくコンパイルされます:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 57;
int *xPtr = &x;
void **xPtrPtr = (void**)&xPtr;
printf("%d\n", *((int*)*xPtrPtr));
}
void **xPtrPtr = (void**)&xPtr;
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