• 函数参数的传值和传址


    函数调用参数传值和传址的区别:

    传值:把参数拷贝一个副本,然后传递给函数体进行操作。但是对参数的操作不会影响到函数外的参数,范围仅在当前的函数内有效。

    1 void compare(int a, int b)//两个参数大小的比较

    传址:把参数的地址传给函数,在函数体内对参数进行操作,会影响到函数外的参数(也就是会影响参数本身)。

    1 void copy(int *des, int sou)//将参数sou拷贝到参数des中

    举例:

     1 typedef struct Node
     2 {
     3     ElemType data;
     4     struct Node *next;
     5 }Node;
     6 
     7 typedef struct Node *LinkList;
     8 
     9 /*
    10  * Init the List.
    11  */
    12 void InitList(LinkList *L);
    13 
    14 /*
    15  * Insert the element e at the i-th position of
    16  * the List. if successful, return 1. Otherwise,
    17  * return 0. 
    18  */
    19 Status ListInsert(LinkList L, int i, ElemType e);

    在初始化链表的时候,用到了双重指针,因为涉及到改变参数L;但是在进行链表插入时,没有使用双重指针,因为此时不需要更改指针L的指向,但是在插入函数内,

    L指针所指向的指针修改后可以被保存。如下代码所示:

     1 Status ListInsert(LinkList L, int i, ElemType e)
     2 {
     3     int j = 0;
     4     LinkList s, p = L;
     5 
     6     while (p && j < i - 1)
     7     {
     8         j++;
     9         p = p->next;
    10     }
    11 
    12     if (!p || j > i - 1)
    13     {
    14         return ERROR;
    15     }
    16     s = (LinkList)malloc(sizeof(LNode));
    17     s->data = e;
    18     s->next = p->next;
    19     p->next = s;//此处就是L指向的指针被改变后,可以被保存
    20     return OK;
    21 }
    以上内容仅代表个人理解,如有不适之处,还望不吝赐教!
  • 相关阅读:
    [实战]MVC5+EF6+MySql企业网盘实战(11)——新建文件夹2
    [实战]MVC5+EF6+MySql企业网盘实战(10)——新建文件夹
    FMXUI
    x-superobject
    mORMot
    NativeXml
    superobject
    jsondataobjects
    QDAC
    DIOCP
  • 原文地址:https://www.cnblogs.com/wojiaowoen/p/6763215.html
Copyright © 2020-2023  润新知