&引用上的骚操作

1,&与运算
2,取地址
3,引用
引用相当于给变量起个小名

#include<iostream>
using namespace std;
void change_num1(int &n);
void change_num2(int *&p);/*说白了引用&就是别名(你的小名,指的是同一个你),
                         如果程序对引用做出改动,其实就是对目标的改动。 */
void change_num3(int *n);

int main()
{
    int *p = NULL;
    cout << p << endl;
    change_num2(p);
    cout << p << endl;
    free(p);
    cout << "hello world!!"<<endl;
    int n = 6;
    change_num1(n);
    cout << n << endl;
    n = 6;
    change_num3(&n);
    cout << n << endl;
    system("pause");
    return 0;
}
void change_num1(int &n)
{
    n =5;
}
void change_num2(int *&p)
{
    p = (int *)malloc(sizeof(int));
}
void change_num3(int *n)
{
    *n =5;
}

void InitList(LinkList *&L) *号表示指针,&表示引用,加了一个&符号意味着函数listinit改变参数l会改变传入的实参,不影响传入数据的类型。
不管什么变量你只要把调用他的函数的变量名前加个&就可以使这个函数调用时能够改变这个变量的值,相当于直接在函数里对这个变量进行改变,先当于指针,而你调用这个函数时,只要正常传入变量就可以了例如上面这个函数LinkList *p;InitList§;
所以对链表的一些操作比如遍历、插入、删除、如果函数的变量是引用类型的,那么就不能对头指针进行赋值,否则会main函数里对应的头指针里存的地址就会被改变。变量就会丢失。所以要用一个别变量存头指针的值,用来遍历。

void DispListN(LinkList *L,int n)
{
    int i = 1;
    LinkList *p = L->next;
    while(p && i!=n)
    {
        p = p->next;
        i++;
    }
    if(!p || i >n)
        printf("NULL\n");
    else printf("The %dth is %c\n",n,p->data);

}//输出第n个结点值。 n为结点的逻辑序号。如果n不在链表长度范围,则输出结点值用NULL表示。
bool ListInsert(LinkList *&L,int i,ElemType e)
{
    LinkList *p = L,*s = NULL;
    int j = 0;
    while(p && (j<i-1))
    {
        p =p->next;
        j++;
}
    if(!p ||( j > i-1))
        return false;
     s = (LinkList*)malloc(sizeof(LinkList));
     s->data = e;
     s->next = p->next;
     p->next = s;
     return true;

    
}
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页