typedef struct ListNode{
int date;
struct ListNode *next;
}ListNode;
int main(int argc, char *argv[])
{
ListNode listNode;
return 0;
}
上边这段代码 ,请问我main函数中ListNode listNode;这句代表这什么?开辟了一块定义好结构体的内存吗?
那这这段代码中l=(ListNode)malloc(sizeof(ListNode));这个又代表了什么?
ListNode listNode中你的数据类型为ListNode,这个类型是你自己通过基本数据类型复合而来,可以看做和int/float等类型相同。
int a和ListNode a本质是一样的,都是定义了一个变量并且系统为他分配了内存,这个a和系统分配的地址已经绑定,无法改变。
l=(ListNode)malloc(sizeof(ListNode))这句,我是觉得有些问题的,当然,不是说不能用,malloc左右两边的类型一致,表明你的l是ListNode l这样定义的,在你定义的时候系统已经分配内存了,再去申请内存似乎没有必要。
用malloc函数的情况通常为 ListNode *l = (ListNode *)malloc(sizeof(ListNode))这样用的。因为光定义指针就只相当于你给一个指针起了个名字,这个指针指向的类型为ListNode。你申请内存,然后系统给了你一个地址,你的这个指针指向这个地址,以后,你的这个指针还可以指向其他的地址。上面那种定义是名字和地址绑定了,不可改变。
malloc函数常用于指针类型的内存申请,系统分配内存,让指针指向这个内存所在的地址
ListNode listNode; 开辟了一个 struct,你可以打印 listNode 的内容,看看是什么。
ListNode listNode;这句是定义一个listNode的变量并分配了内存,在函数中的局部变量内存是在栈中的。
l=(ListNode)malloc(sizeof(ListNode));这是动态申请空间。这段内存是在堆中的。