reinterpret_cast <int*>(char*)

Zin*_*gam -1 c++ int pointers

当动态分配char*类型的缓冲区时,以及当你想将它强制转换为特定类型时,你应该使用:

reinterpret_cast<int *>(char *)
Run Code Online (Sandbox Code Playgroud)

要么:

static_cast<int *>(static_cast<void *>(char *))
Run Code Online (Sandbox Code Playgroud)

为什么?

tay*_*10r 5

*pk = new int(2);应该是pk代替*pk

在声明了指针之后int * pointer,所有引用都引用了point一个地址,所有引用都引用*pointer了地址中包含的内容.默认情况下,指针不指向有效的内存位置,您必须分配有效的地址或拨打电话new.这就是为什么在编写时pk = &k没有分段错误 - 因为pk现在包含k指向有效内存位置的地址.

指针的语法可能有点令人困惑,主要是因为它*可能有多种含义,具体取决于您使用它的方式.这是一个快速解释:

  • 在声明中,*表示您正在声明一个指针(即int * pk).
  • 在数值数据类型之间,*是乘法符号(即4 * num).
  • 写在变量旁边,它返回指针所包含地址的值(即*myPointer(*mypointer)).

由于new返回一个地址,因此您要分配一个地址pk而不是指定的值pk.

如果要初始化指针,请使用new语句声明它.像这样:

int * pk = new int;
Run Code Online (Sandbox Code Playgroud)

但是没有编译时功能声明一个自包含的指针和值.您最接近的是通过声明单独的变量,就像您所做的那样,并使用该变量的地址初始化指针.像这样:

int num = 43;
int * p = &num; 
Run Code Online (Sandbox Code Playgroud)