C中有關引用和指針的異同
阿新 • • 發佈:2018-04-21
是不是 tails spa swap 內存地址 觀察 BE sdn tps
參考於https://blog.csdn.net/wtzdedaima/article/details/78377201
C語言也學了蠻久的,其實一直都沒有用到過或者碰到過引用的例子。前端時間再全面復習C的基礎知識,看到引用這一塊,發現兩者的還是有一些差別的,抱著我不用,萬一別人用我也需要看懂的原則,仔細觀察研究了兩者的區別。
一下內容為轉載:
引用:引用是一個變量的另一個名字,又稱別名。定義方式:
int a=10;
int &b=a;在這裏,意思就是給a變量起了一個新名字b,因此b不可再次被重新定義。
引用必須初始化,無空引用,並且引用不分等級。
引用與指針的異同點:
相同點:在引用中 int &b=a;這一句代碼可被編譯器看做int * const b=&a;//加上const的作用是表明指針b的自身的值(a的地址)不能改變,而指向的值(a的值)可以改變。也就是說引用相當於指針,引用與指針在編譯時的方法一樣,指向的都是變量的內存地址。
不同點:1.在定義方式中引用儲存的是值,而指針是一個變量的拷貝,存儲的是地址。
2.引用只能對已經存在的變量或對象實現引用,而指針則不需要,可以定義為空。
3.在函數的傳參中,如果傳遞的是一個引用,意味著這個變量或對象已經存在了;如果傳遞的是一個指針,則不能判斷這個指針是不是有效的,是不是空的,因此在函數體 中大多數都得進行指針是否為空的判斷。但是雖然引用較為安全,但是利用指針來傳參效率較快。
4.引用是直接訪問變量,不用分配自己的內存空間,而指針是間接訪問,需要定義,需要有自己的內存空間。
例:交換函數swap()
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void main()
{
int x=10,y=20;
swap(x,y);
}
等價指針為:
void swap(int *const a,int *const b)
{
int tmp=*a;
*a=*b;
*b=temp;
}
void main()
{
int x=10,y=20;
swap(&x,&y);
}
C中有關引用和指針的異同