zoukankan      html  css  js  c++  java
  • 关于指针

    指针,可以说是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链表起到修改的作用。

  • 相关阅读:
    Jenkins运行完Test后,把ngreport生成的测试报告 拷贝到相应的文件夹
    解析xml报classnotfound错误
    配置NGReport 报告中文
    fork()调用使子进程先于父进程被调度
    堆排序
    良序原理
    高速缓冲区初始化
    Python3:输出当前目录所有目录和文件--walk()函数
    Python3:输出当前目录所有文件的第二种方式-walk()函数
    Python3:递归实现输出目录下所有的文件
  • 原文地址:https://www.cnblogs.com/ranyang/p/13821952.html
Copyright © 2011-2022 走看看