如何对int指针进行类型转换,然后在其中存储一个int?

时间:2015-04-03 10:14:14

标签: c++ pointers

1.    void* x;
2.    x = new int [10];
3.    x = static_cast<int*>(x);
4.    *x = 2;

在第4行,我得到:error: ‘void*’ is not a pointer-to-object type

2 个答案:

答案 0 :(得分:3)

您需要定义新的指​​针类型。

你是静态转换x,但静态转换后类型信息会丢失,因为在声明时x是void *。

x在他的一生中将继续无效*。

这是一个有效的代码示例:

     void* x;
     int* ptr;
     x = new int[10];
     ptr = static_cast<int*>(x);
     *ptr = 2;

或者,您也可以在同一行中进行投射和投射:

    *(static_cast<int*>(x)) = 2;

答案 1 :(得分:0)

由于任何指针(指向成员的指针和指向函数的指针,完全不同)都可以隐式转换为void指针,因此第2行隐式转换new int[10]的结果int *void *

同样,您的第3行明确地将x转换为int *static_cast),并将其结果隐式转换回来并存储在x中。这没有净效果。如果编译器足够智能,它将完全忽略该语句。

你需要做的是引入另一个变量,它是指向int的指针。

void *x;
x = new int[10];
int *y = static_cast<int *>(x);
*y = 2;

如果你真的想使用一个没有任何int指针变量的void指针,那就这样做吧;

void *x;
x = new int[10];
*(static_cast<int *>(x)) = 2;

这非常难看,只有在特殊情况下才需要。

在实践中,除非你需要特别的其他东西的空指针,否则完全消除它。

int *x;
x = new int[10];
*x = 2;

事实上,没有必要使用任何显式类型转换,这也使得这不容易出错。