指針的引用(*&)

Void TEncSlice::compressSlice( TComPic* & rpcPic )函數參數傳遞的是指針的引用
函數參數傳遞有三種方法,值傳遞,址傳遞,傳遞引用;
這裏說的是傳遞指針的引用。
Void TEncSlice::compressSlice( TComPic* rpcPic )————————傳址
Void TEncSlice::compressSlice( TComPic & rpcPic )———————引用
Void TEncSlice::compressSlice( TComPic rpcPic )———————傳值
傳址和引用都可以改變原來的值,而傳值只是副本,無法改變原來的值。
指針的引用可以改變指針的內容,也就是地址。。。。。

首先看下引用,引用就是變量的別名,當函數變量是int類型的變量a的引用,那麼可以寫爲
Void TEncSlice::compressSlice( int &a)
同樣是引用,當引用的對象時指針呢?是不是也可以和int類型變量一樣考慮呢?我的理解是肯定的
Void TEncSlice::compressSlice( int* &a )可不可以理解爲(int*)爲一個整體?他就是代表引用的對象爲指向整型變量的指針。

理解指向指針的引用

#include <iostream>
using namespace std;
void FreePtr1(int* ptr1)
{
    delete ptr1;
    ptr1 = NULL;
}

void FreePtr2(int*& ptr2)
{
    delete ptr2;
    ptr2 = NULL;
}
void FreePtr3(int **ptr3)//傳指針的指針
{
    delete *ptr3;
    *ptr3 = NULL;
}

void main()
{
    cout << "---------------------------------------" << endl;
    int *p1 = new int;
    *p1 = 1;//不是空指針
    cout << "*p1=" << *p1 << endl;//值
    FreePtr1(p1);//不會改變原來p1的內容(地址)
    cout << "after call freePtr1" << endl;//
    if (p1 != NULL)//會執行
    {
        cout << "p1 is not null" << endl;
        cout << "*p1=" << (*p1) << endl;
    }
    cout << "---------------------------------------" << endl;
    int *p2 = new int;
    *p2 = 2;
    cout << "*p2=" << *p2 << endl;//值
    FreePtr2(p2);//改變了p2的內容
    cout << "after call freePtr2" << endl;
    if (p2 != NULL)
    {
        cout << "*p2=" << *p2 << endl;
    }
    else//執行
    {
        cout << "the p2 is null" << endl;
    }
    cout << "---------------------------------------" << endl;
    int *p3;
    p3 = new int(3);
    cout << "*p3=" << *p3 << endl;
    FreePtr3(&p3);//取指針的地址爲參數
    cout << "after call freePtr3" << endl;
    if (p3 != NULL)
    {
        cout << "*p3=" << *p3 << endl;
    }
    else
    {
        cout << "the p3 is null" << endl;
    }
    cout << "---------------------------------------" << endl;
    system("pause");

}

加入這段代碼之後應該更好理解了!!結果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章