C中有關引用和指針的異同

參考於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()spa

void swap(int &a,int &b) { int temp=a; a=b; b=temp; } void main() { int x=10,y=20; swap(x,y); }

 

 

等價指針爲:.net

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); }
相關文章
相關標籤/搜索