当动态分配char*类型的缓冲区时,以及当你想将它强制转换为特定类型时,你应该使用:
reinterpret_cast<int *>(char *)
Run Code Online (Sandbox Code Playgroud)
要么:
static_cast<int *>(static_cast<void *>(char *))
Run Code Online (Sandbox Code Playgroud)
为什么?
这*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 = #
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |