• 关于指针


    指针,可以说是c语言最重要也是最难的了。

    指针是指向变量的地址,双重指针是指向指针的地址。

    当我们使用函数传递指针时,我们只能修该对应地址的值,但我们不能修改指针的地址。所以当我们要修改指针的地址时,我们就要使用当双重指针了,双重指针指向指针的地址。我们用函数代码进行说明吧。

    void CreateList (List *L)
    {
        int n;

     scanf("%d",&n);
        *L = (List)malloc(sizeof(LNode));
        (*L)->next = NULL;
        (*L)->flag = 0;
        ElemType x;
        int i;
        for(i = 0;i < n;i++){
            printf("Please enter a number:");
            scanf("%d",&x);
            EnList(*L,i+1,i+1);
        }
    }

    这个函数是用于创建一个新的链表,包含了n个数据,如果我们函数头声明为Create(List L),你会发现,你在这个函数进行的所有操作,主函数的L都不会改变。因为你仅仅是传递了一个指针进来,在函数里面,指针的地址是不能修改的。现在我们再来看看这串代码。

    void EnList (List L,ElemType x,int Position)
    {
        if(Position < 1 || Position - 1 > L->flag ){
            printf("Illegal Insert! ");
            return;
        }
        
        List p = L;
        while(Position - 1){
            p = p->next;
            Position--;
        }
        List temp = (LNode*)malloc(sizeof(LNode));
        temp->data = x;
        temp->next = p->next;
        p->next = temp;
        L->flag++;
        printf("L->flag is %d ",L->flag);
    }

    这个函数的功能是将x插入在链表的第i个位置,为什么同样是传入一个指针,这个也没要返回,为什么L变了呢?因为里面的L->next起了关键作用,里面的L->next也是一个指针,我们对它的修改就是指向下一个结点可以换成*L->next理解,这并不是改变它的地址,等同于在一个函数中,我们传入了一个指针,然后对它进行赋值。所以我们在这个函数能对L链表起到修改的作用。

  • 相关阅读:
    一句话解释c#中的特性,你了解多少
    CentOS虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?
    samba服务器配置及window网络磁盘映射
    PHP中各种Hash算法性能比较
    Redis持久化
    设置redis主从出现的问题
    Redis启动多端口、运行多实例
    Redis学习手册(主从复制)
    tengine/nginx-tomcat动静分离遇到的问题
    使用 Git Hooks 实现自动项目部署
  • 原文地址:https://www.cnblogs.com/ranyang/p/13821952.html
Copyright © 2020-2023  润新知