C++ malloc的演员阵容会返回什么?

C++ malloc的演员阵容会返回什么?,c++,casting,malloc,C++,Casting,Malloc,我试图理解在最后一行返回的名为p的内容 #include <stdio.h> #include <stdlib.h> int main(){ int a; int* p; p = (int*)malloc(sizeof(int)); } #包括 #包括 int main(){ INTA; int*p; p=(int*)malloc(sizeof(int)); } Q1 假设malloc(sizeof(int))返回&name(名称可以是x、y或

我试图理解在最后一行返回的名为p的内容

#include <stdio.h>
#include <stdlib.h>
int main(){
    int a;
    int* p;
    p = (int*)malloc(sizeof(int));
}
#包括
#包括
int main(){
INTA;
int*p;
p=(int*)malloc(sizeof(int));
}
Q1
假设
malloc(sizeof(int))
返回
&name
(名称可以是x、y或w), 将该行解释为
p=(int*)(内存地址到块大小的开头)
,安全吗

Q2
有人能把这个重写一下让它更清楚吗?也许在p=…之前加一行。。我是C++初学者。 这是一个链接到一个我如何试图理解一切的图像。。。 这仅供参考

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

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

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

*p=1234
它将使用从存储在p中的内存位置开始的所有32位内存

关于安全,请阅读评论

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

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

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

*p=1234
它将使用从存储在p中的内存位置开始的所有32位内存


关于安全问题,请阅读评论。

我想我已经弄明白了。

Malloc刚刚分配了sizeof(类型)的内存 然后它只返回一个(空),而在C++中,INT*P不能被赋值为空洞*,因为C++对“隐式铸造”是严格的。*< /P> 那么答案呢

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

问题2答案
这可以重写为

#include <stdio.h>
#include <stdlib.h>
int main(){
int* p;
p = new int;
}
#包括
#包括
int main(){
int*p;
p=新整数;
}


我想我已经弄明白了。

Malloc刚刚分配了sizeof(类型)的内存 然后它只返回一个(空),而在C++中,INT*P不能被赋值为空洞*,因为C++对“隐式铸造”是严格的。*< /P> 那么答案呢

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

问题2答案
这可以重写为

#include <stdio.h>
#include <stdlib.h>
int main(){
int* p;
p = new int;
}
#包括
#包括
int main(){
int*p;
p=新整数;
}


不要对简单变量使用动态分配。只需写
intx,或您想要的任何名称。对于动态分配,您的第一选择应该是标准容器,如
std::vector
;第二,对于特殊需求,像
std::unique_ptr
这样的智能指针通过
新的
-表达式持有指向分配内存的指针;第三,特定于操作系统的特殊分配,如Windows'
VirtualAlloc
。只有当C API需要时,或者当您绝对需要来自
realloc
的速度时,才应该使用
malloc
。作为一个初学者,你在这个列表的前面。也就是说,没有动态分配,或者使用std容器。Q1:没有涉及名称(标识符),因此选项B。该代码中没有“第9行”。trueeeeeeeeeeeee@HarmanNieves我是C++初学者。什么书或教程建议你在C++程序中使用<代码> MalOC/<代码>?不管它是什么,远离它。不要对一个简单的变量使用动态分配。只需写
intx,或您想要的任何名称。对于动态分配,您的第一选择应该是标准容器,如
std::vector
;第二,对于特殊需求,像
std::unique_ptr
这样的智能指针通过
新的
-表达式持有指向分配内存的指针;第三,特定于操作系统的特殊分配,如Windows'
VirtualAlloc
。只有当C API需要时,或者当您绝对需要来自
realloc
的速度时,才应该使用
malloc
。作为一个初学者,你在这个列表的前面。也就是说,没有动态分配,或者使用std容器。Q1:没有涉及名称(标识符),因此选项B。该代码中没有“第9行”。trueeeeeeeeeeeee@HarmanNieves我是C++初学者。什么书或教程建议你在C++程序中使用<代码> MalOC/<代码>?不管是什么,都要远离它。
int
的大小取决于系统。实际上,它可以是1、2、4或8个字节(请注意,一个字节不是八位字节)。或从16位到64位。无论类型如何,指针的大小始终相同。这个大小也取决于系统。@OwO——指针的大小总是相同的,不管类型如何——这并不总是正确的。指向类成员函数的指针的大小可能与指向非类成员函数的指针的大小不同。我感到困惑。如何将4个字节作为一个单元访问。不是所有的东西都是通过总字节行的第一个地址访问的吗?你能解释一下我展示的记忆图的图片吗?@HarmanNieves我已经编辑了答案。请看它是否有意义。
int
的大小取决于系统。实际上,它可以是1、2、4或8个字节(请注意,一个字节不是八位字节)。或从16位到64位。无论类型如何,指针的大小始终相同。这个大小也取决于系统。@OwO——指针的大小总是相同的,不管类型如何——这并不总是正确的。sizeof()函数是指向类成员的指针