C與C 的區別(3) 指標與引用

2021-09-19 23:18:20 字數 1202 閱讀 1801

我們在學習c語言的時候,知道函式傳參有兩種,值傳遞和位址傳遞;而在c++中,多了乙個引用的概念,引用就是給已存在的變數取了乙個別名,編譯器不會給引用開闢新的空間,與其引用的變數共用一塊空間。

引用:引用就是對某一變數的乙個別名,對引用的操作對變數直接操作完全一致;

int a = 10;

int *p = a;

指標:指向一塊記憶體,可以通過解引用改變記憶體塊的值。

int a;

int &ra =a;

(1)引用作為引數

在c中傳參有兩種形式:值傳遞和位址傳遞;我們知道在函式呼叫使用值傳遞時,要將引數壓棧(有關函式呼叫壓棧詳見:如果是大塊資料作為引數傳遞的時候,採用指標的方式,這樣可以避免大塊記憶體全部壓棧;在c++中引用指標後,被調函式的形參就成為原來主調函式中的實參變數或物件的乙個別名來使用,所以在被調函式中對形參變數的操作就是直接對其相應的目標物件(主調函式)的操作。使用引用並沒有在記憶體中產生副本。從而提高了效率。例如:

void swap(int &a,int &b)

int main()

float &fn2(float r) //定義函式fn2,它以引用方式返回函式值

void main() //主函式

{ float a=fn1(10.0); //第1種情況,系統生成要返回值的副本(即臨時變數)

/*float &b= fn1(10.0);*/ //第2種情況,可能會出錯(不同 c++系統有不同規定)

//不能從被調函式中返回乙個臨時變數或區域性變數的引用

float c=fn2(10.0); //第3種情況,系統不生成返回值的副本

//可以從被調函式中返回乙個全域性變數的引用

float &d=fn2(10.0); //第4種情況,系統不生成返回值的副本

//可以從被調函式中返回乙個全域性變數的引用

std::cout《引用作為返回值,必須遵守以下規則:

1、引用是給某個變數取個別名,主要目的是在函式傳遞引數中,解決大記憶體塊的傳遞效率和記憶體的使用情況;在傳遞中不產生副本,並且通過const的使用,保證了引用傳遞的安全性。

2、引用與指標的區別是,指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。

3、引用使用在對流操作符《和》、賦值操作符=的返回值、拷貝建構函式的引數、賦值操作符=的引數等

09 11 08 指標與引用的區別

引用和指標 相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 4.引用沒有 const,指標...

1 指標與引用的區別

指標 指標是位址傳遞,但其本質上是值傳遞,通常實參傳給形參時,被調函式的形參作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。所以進行指標傳遞時,作為實參的指標本身所存的位址值是不會變的,但指標所指位址中的內容則會根據函式的不同操作而改...

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...