c语言 malloc函数在链表中的用处

为什么加一个链表就一定要用malloc函数分配一块内存?加一个链表不就是再增加一个结构体吗,一般来说增加一个结构体,不是由编译器自动分配一块内存吗?为什么还要写(链表指针)malloc(size of 结构体)

没说是结构体就必须要分配一块内存;

首先,结构体和int char dobule等等一样,也是一种数据类型,无非是有点特殊而已;


那么,按如下 的例子:


char *p = NULL; //p 这个时候只能装指针,也就是一个地址,超过了就错误了。

有时候,我们想将一个字符串拷贝到 p 所指定的地址(不是把字符串的地址给p,注意区别),这个时候就需要有以下三个步骤:

1, 在堆(注意不是栈)上划一个区域,区域大小看你的心情。

2, 然后将这个区域的地址 赋值给 p;

3,循环将一个字符串拷贝到p所指向的区域。


代码就如下:

char * p = (char*)malloc(sizeof(128));
memset(p, 0, 128);
memcpy(p, src);

做个比较,这个时候看  char p   和 char *p  有什么不同?

char p; //是程序自动在栈上分配了空间

char *p = malloc()//  是在堆上分配了空间;


如果是结构体,假设:


struct A {};

A a; //那这个时候,一般来说,就类似于 char p;在栈上分配空间;(但是结构体内部的东西另说);


A *a ;// 这个时候,就类似于 char *p;//有可能你需要手动在堆上分配空间。




简单来说,如果是指针,可能会涉及到malloc分配,非指针的话,就没有malloc一说。


你看你的结构体 定义的变量是不是一个指针型的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-26
因为我们使用链表甚至以后的二叉树结构时,我们往往不是直接使用结构体作参数,而是使用指向结构体的指针。而我们定义一个结构体指针,只是为该指针分配了内存,并没有为真正的结构体分配内存,这个时候,我们就使用MALLOC这个函数了。
第2个回答  2014-03-26
结构体是不分配空间内存的,故需要malloc来分配动态空间内存然后把该内存区域的首地址返回到线性表中的elem指针
相似回答