我正在尝试理解最后一行返回的名称为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 ++的初学者。
这是一个链接到我试图理解一切的图像......
这仅供参考
答案 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;
}