首先指針和引用都是地址的概念。
c語言沒有引用,c++有引用,c++11前只有一級引用,c++11之後支持多級引用
引用定義:引用是一個變量的別名,不能爲空,必須初始化,引用初始化的值必須可以取地址,一經引用不能修改。引用的大小是所指向變量的大小。
指針可能成爲空指針或者野指針,解引用前要判空,引用比指針安全,不存在空引用。
定義引用底層相當於定義了一個指針。引用變量也是佔內存的,用來存儲被引用變量的地址,不過程序中訪問引用,就做了解引用操作,給人一種引用變量不佔內存的假象。
彙編層面來看:
int main()
{
int a = 10;
int &b = a;
//lea eax,[a]
//mov dword ptr [b],eax
int *p = &a;
//lea eax,[a]
//mov dword ptr [p],eax
b = 20;
//mov eax,dword ptr [b]
//mov dword ptr [eax],14h
*p = 20;
//mov eax,dword ptr [p]
//mov dword ptr [eax],14h
return 0;
}
可以看到彙編層面是完全一樣的。
對於其他不同點,可以在程序中體會