两种情况下指针的内存分配是否相同
struct_datatype * p=NULL;
struct_datatype * p=malloc;
除了从堆栈和堆分配内存??
在第一种情况下,指针被初始化为指向地址 0,因此,如果您访问指针指向的数据,则会出现 0 指针异常,因为指针未指向可访问的内存位置。
第二种情况,p=(struct_datatype *)malloc(sizeof(struct_datatype)); 内存已分配并分配给指针,因此您可以通过 p 访问该内存,例如,如果 x 是结构中的 int 字段,则可以通过以下方式设置 xp->x=123
这个问题不清楚你在问什么。
struct_datatype * p=NULL;
没有分配内存p
。它指向没有分配的内存。
struct_datatype * p=malloc();
可能已经分配了一些内存,并且分配的内存的地址已分配给p
. 如果 malloc 失败,NULL 将被分配给p
.
注意:对于这两种情况,sizeof 都是p
sizeof struct_datatype*
。
注意:指针变量p
将在编译时分配给栈中的内存,在这两种情况下都是 sizeof struct_datatype*
。存储在指针中的地址p
可能指向用户地址空间中可访问的任何有效内存地址。在NULL
没有分配地址的情况下(并且 NULL 不是用户可访问的地址),但是当您这样做时malloc
(如果成功),分配的内存地址将被分配给堆p
空间中的指针,否则它将再次被分配给 NULL。