结构类型的malloc()的返回值

时间:2019-06-02 04:30:19

标签: c

#include<stdio.h>

struct student

{

  int roll_no;

  int mark;

  struct student *p;

} ;

int main()

{

  struct student *stu;

  stu=malloc(sizeof(struct student));

}

malloc()对于

的实际返回值是多少?

结构类型?如何将其分配给

结构变量?

现在要声明,

Struct student *stu;

内存分配是这样的

roll_no: 1000 - 1004

mark: 1004 - 1008

p: 1008 - 1012

对于陈述

stu=malloc(sizeof(struct student));

我的假设如下

首先分配内存块

让我们说2000年-2012年

然后分配部分

2000 stored at 1000

2004 stored at 1004

2008 stored at 1008

这是malloc()的分配部分的工作方式

和结构变量,或者还有其他

假设。

3 个答案:

答案 0 :(得分:0)

malloc()返回一个指向内存块(void *)的指针,该指针足够大以容纳size(第一个参数)字节,而不管该参数是什么还是强制转换了什么

例如,stu->roll_no将访问分配的内存的前两个字节(假设int是32位)(假定未填充结构)。

在C语言中,void *指针被隐式转换为分配给它们的指针类型。

答案 1 :(得分:0)

如果我的理解中有任何错误,请进行更正,因此对于陈述,请构造学生* stu;为下一条语句stu = malloc(sizeof(struct student))分配4个字节的内存空间;分配了第一个内存块,假设分配了12个字节,并将该块的起始地址分配给stu。因此,如果我们说stu-> roll_no则不访问前4个字节,如果我们说stu-> marks则访问后4个字节。如果我们说stu-> p,则访问接下来的4个字节。并且为了清楚起见,与普通的结构变量将为struct学生分配12个字节而结构指针变量仅分配4个字节不同。

答案 2 :(得分:-1)

malloc返回void *指向您发送的内存中某个位置的指针,可以将其强制转换为要查看的任何-https://www.tutorialspoint.com/cprogramming/c_type_casting.htm类型,请参见malloc定义: https://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm