当前位置:编程学习 > C/C++ >>

由链表初始化看C语言的二级指针

先来看C语言创建链表、插入节点和遍历链表的一段代码:
 
[c]  
#include <stdio.h>  
#include <stdlib.h>  
  
typedef int ElemType;  
  
typedef struct Node{  
    ElemType elem;  
    struct Node *next;  
}Node, *LinkedList;  
  
//void init_linkedlist(LinkedList *list) {  
void init_linkedlist(LinkedList *list) {  
    *list = (LinkedList)malloc(sizeof(Node));  
    (*list)->next = NULL;  
}  
  
void insert(LinkedList list, ElemType elem) {  
    Node *p, *q;  
    q = list;  
    p = (Node *)malloc(sizeof(Node));  
    p->elem = elem;  
    p->next = NULL;  
    while(q->next != NULL) q = q->next;  
    q->next = p;  
}  
  
void main() {  
    LinkedList list, p;  
    init_linkedlist(&list);  
    insert(list, 3);  
    insert(list, 4);  
    insert(list, 5);  
    p = list->next;  
    while(p != NULL) {  
        printf("%4d", p->elem);  
        p = p->next;  
    }  
    printf("\n");  
}  
 这个小程序完成的功能很简单,创建一个链表,然后插入3,4,5这三个整数,最后遍历链表输出每个节点中的整数。但是大家注意到没有,在main函数中,初始化链表的函数参数的是一个二级指针,为什么要使用一个二级指针作为参数呢?在任何一本C语言的教材上,都会写C语言的函数参数传递是值传递方式,所有的参数都是通过值传递的,使用指针作为参数可以在函数中改变参数的值(此处感觉表达有误,但是想不到更好的表达方式)。可能有人会有疑问了,在上面代码的main函数中初始化链表的调用函数代码
 
[java]  
init_linkedlist(&list);  
 list已经是一个指针了,为什么要传递一个指针的地址,直接使用指针不行吗?确实不行。
补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,