来自malloc的演员回归了什么?

时间:2018-01-01 00:39:14

标签: c++ casting malloc

我正在尝试理解最后一行返回的名称为p。

#include <stdio.h>
#include <stdlib.h>
int main(){
    int a;
    int* p;
    p = (int*)malloc(sizeof(int));
}

Q1
假设malloc(sizeof(int))返回&name(名称可以是x或y或w), 将该行解释为p=(int*)(memoryAddress to begining of block size)

是否安全

Q2
有人可以改写这个以使其更清楚吗?也许在p =之前添加一行。我是C ++的初学者。

这是一个链接到我试图理解一切的图像......  这仅供参考
image

2 个答案:

答案 0 :(得分:2)

    p = (int*)malloc(sizeof(int));

该行只是分配4个字节(实际大小取决于编译器)的内存并返回第一个字节的地址。第一个字节地址分配给p。

malloc的返回类型是通用的(void *)。所以我们需要将它转换为int *以将其用作整数。通过说&#34;将它用作整数&#34;,这意味着4个字节的连续存储器将用作一个数据。

因此,如果您将数据放在该变量中,如下所示:

*p=1234

它将使用从存储在p中的存储单元开始的所有32位存储器。

关于安全性,请阅读评论。

答案 1 :(得分:0)

我想我已经弄明白了。

Malloc刚刚分配了sizeof(type)的内存 然后它只返回一个(void )并且在c ++中,int * p不能被赋值为void *因为c ++对“隐式转换”是严格的。*

所以答案

Q1答案
假设是错误的,malloc(sizeof(int))返回为sizeof分配的字节数的第一个字节的类型void *(...)

Q2答案
这可以改写为

#include <stdio.h>
#include <stdlib.h>
int main(){
int* p;
p = new int;
}