为什么加一个链表就一定要用malloc函数分配一块内存?加一个链表不就是再增加一个结构体吗,一般来说增加一个结构体,不是由编译器自动分配一块内存吗?为什么还要写(链表指针)malloc(size of 结构体)
没说是结构体就必须要分配一块内存;
首先,结构体和int char dobule等等一样,也是一种数据类型,无非是有点特殊而已;
那么,按如下 的例子:
char *p = NULL; //p 这个时候只能装指针,也就是一个地址,超过了就错误了。
有时候,我们想将一个字符串拷贝到 p 所指定的地址(不是把字符串的地址给p,注意区别),这个时候就需要有以下三个步骤:
1, 在堆(注意不是栈)上划一个区域,区域大小看你的心情。
2, 然后将这个区域的地址 赋值给 p;
3,循环将一个字符串拷贝到p所指向的区域。
代码就如下:
char * p = (char*)malloc(sizeof(128));做个比较,这个时候看 char p 和 char *p 有什么不同?
char p; //是程序自动在栈上分配了空间
char *p = malloc()// 是在堆上分配了空间;
如果是结构体,假设:
struct A {};
A a; //那这个时候,一般来说,就类似于 char p;在栈上分配空间;(但是结构体内部的东西另说);
A *a ;// 这个时候,就类似于 char *p;//有可能你需要手动在堆上分配空间。
简单来说,如果是指针,可能会涉及到malloc分配,非指针的话,就没有malloc一说。
你看你的结构体 定义的变量是不是一个指针型的