1.区别
第一:创建一个新的节点
SListNode* newhead = (SListNode*)malloc(sizeof(SListNode)); 这行代码使用了malloc函数来分配内存空间,通过sizeof(SListNode)来确定需要分配的内存大小。然后将返回的指针强制类型转换为SListNode类型的指针,并将其赋值给newnode变量。这种方式是使用C语言中的动态内存分配方式。
第二: 初始化一个指针变量
SListNode* cur = NULL; 这行代码将plist指针赋值给cur变量,它们指向同一个内存地址。这种方式是将一个指针变量的值赋给另一个指针变量,使它们指向同一个对象。
总结
- 第一行代码是使用malloc函数动态分配了一块内存空间,并将其指针赋值给了newhead。这样做是为了创建一个新的SListNode类型的节点,并将其作为链表的头节点。通过malloc函数分配的内存空间在使用完后需要手动释放,否则会造成内存泄漏。
- 第二行代码将cur的值设置为NULL,表示当前节点为空。这样做是为了初始化一个指针变量,可以在后续的操作中用来指向链表的某个节点。
2.应用场景:
第一行代码通常用于创建新的节点或对象,例如在链表中插入新节点时,需要动态地分配内存空间来存储新节点的数据。这样可以确保每个节点都有独立的内存空间。
第二行代码通常用于遍历链表或者在链表中进行节点操作时,将当前节点的指针赋给一个临时变量,以便于对当前节点进行操作或者移动到下一个节点。
3.举例说明--链表
在C语言链表中,需要初始化一个指针变量的情况有两种:
- 创建链表时,需要初始化一个指向链表头节点的指针变量。
- 这样可以方便地遍历链表和操作链表。例如:
struct Node { int data; struct Node* next; }; struct Node* head = NULL; // 初始化指向链表头节点的指针变量
- 遍历链表时,需要初始化一个指向当前节点的指针变量。
- 这样可以方便地通过指针变量访问当前节点的数据和下一个节点。例如:
struct Node* temp = head; // 初始化指向当前节点的指针变量 while (temp != NULL) { // 访问当前节点的数据 printf("%d ", temp->data); // 移动到下一个节点 temp = temp->next; }
需要创建一个新的节点的情况是
-
在向链表中插入新的数据时,需要动态分配内存空间来创建新节点。例如:
-
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node)); // 创建一个新的节点 new_node->data = 10; // 设置新节点的数据 new_node->next = NULL; // 设置新节点的下一个节点为NULL // 将新节点插入到链表中 if (head == NULL) { head = new_node; } else { struct Node* temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = new_node; }