日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ —— C++引用

發布時間:2023/12/20 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ —— C++引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++引用

?

一、普通引用

【變量名】

變量名實質上是一段連續存儲空間的別名,是一個標號

程序中通過變量來申請并命名內存空間

通過變量的名字可以使用存儲空間

問題1:對一段連續的內存空間只能取一個別名嗎?【不是】

1、引用是C++的概念

// 問題:C中可以編譯通過嗎?

int main(void) {int a = 0;int &b= a; //int * const b = &ab=11;//*b = 11;return 0; }

// ?gcc編譯結果?

// 錯誤: expected identifier or ‘(’ before ‘&’token

//‘b’未聲明(在此函數內第一次使用)

// 結論:請不要用C的語法考慮 b=11

?

2、引用概念

(1)在C++中新增加了引用的概念

(2)引用可以看作一個已定義變量的別名

(3)引用的語法:Type& name = var;

(4)引用做函數參數?(引用作為函數參數聲明時不進行初始化)

int main(void) {int a = 1;int &b = a;//b是a的別名,請問c++編譯器后面做了什么工作?b = 5;cout<< "b--->"<< a << endl; return 0; }

【普通引用在聲明時必須用其它的變量進行初始化】


3、引用的意義

(1)引用作為其它變量的別名而存在,因此在一些場合可以代替指針

(2)引用相對于指針來說具有更好的可讀性和實用性

void swap(int &a, int &b) {int t = a;a = b;b = t; }void swap(int*a, int *b) {int t = *a;*a = *b;*b = t; }

4、普通引用有自己的空間嗎?

#include <stdio.h>struct stu {int &a;int &b; };int main(void) {printf("sizeof(stu) =%d\n", sizeof(stu));return 0; } // 8

引用是一個有地址,引用是常量(char *const p


5、引用的本質

(1)引用在C++中的內部實現是一個常指針

? ? ? ? ?Type&name ?èType*const name

(2)C++編譯器在編譯過程中使用常指針作為引用的內部實現,因此引用所占用的空間大小與指針相同。

(3)從使用的角度,引用會讓人誤會其只是一個別名,沒有自己的存儲空間。這是C++為了實用性而做出的細節隱藏


6、引用注意點

(1)當函數返回值為引用時

? ? ? ? ? 若返回棧變量

? ? ? ? ?不能成為其它引用的初始值

? ? ? ? ?不能作為左值使用

(2)若返回靜態變量或全局變量

? ? ? ? ?可以成為其他引用的初始值

? ? ? ? ?即可作為右值使用,也可作為左值使用?

【當實參傳給形參引用的時候,只不過是c++編譯器幫我們程序員手工取了一個實參地址,傳給了形參引用(常量指針)】

?

二、常引用

1、const引用(使用變量初始化)

【const在C中是只讀變量,在C++中是常量】

const Type& name = var;【const引用讓變量擁有只讀屬性】

#include <iostream> using namespace std;int main(void) {int a = 2;const int &b = a;b= 3;cout<< a << b << &a << &b << endl;return 0; }

// 錯誤:向只讀形參‘b’賦值


2、const引用(使用字符常量初始化)

(1)用變量對const引用初始化,const引用分配內存空間了嗎?

(2)用常量對const引用初始化,const引用分配內存空間了嗎?

#include <iostream> using namespace std;int main(void) {const int &a = 10;int *p = (int *)&a;*p = 12;cout << a<< endl;return 0; }

//當使用常量(字面量)對const引用進行初始化時,C++編譯器會為常量值分配空間,并將//引用名作為這段空間的別名

//使用常量對const引用初始化后將生成一個只讀變量

?

const&相當于const int ?*const a;

普通引用相當于int *const a;


三、引用與指針有什么區別

(1) 引用必須被初始化,指針不必。

(2) 引用初始化以后不能被改變,指針可以改變所指的對象。

(3) 不存在指向空值的引用,但是存在指向空值的指針。


總結

以上是生活随笔為你收集整理的C++ —— C++引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。