繁体   English   中英

如何将void指针转换为int指针,然后将int指针存储在其中?

[英]How to typecast a void pointer to an int pointer and then store an int in it?

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

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

您静态转换了x,但是由于声明时x为void *,静态转换后类型信息会丢失。

x在他的一生中将始终保持无效*。

这是一个工作代码示例:

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

或者,您也可以在同一行中指定和投放:

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

由于可以将任何指针(除指向成员的指针和指向函数的指针之外的其他指针,它们完全是其他东西)都隐式转换为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;

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

在实践中,除非特别需要void指针,否则请完全消除它。

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

无需费力地进行任何显式类型转换的事实也使这种错误的发生率也降低了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM