&引用上的騷操作

€positive發表於2020-10-19

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;

    
}

相關文章