欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中引用處理的基本方法

 更新時(shí)間:2022年12月21日 12:08:19   作者:莫淺子  
引用不是新定義了一個(gè)變量,而是給已經(jīng)存在的變量取了一個(gè)別名,編譯器不會(huì)為引用變量開(kāi)辟內(nèi)存空間,他和他引用的變量共用一塊內(nèi)存空間,下面這篇文章主要給大家介紹了關(guān)于C++中引用處理的基本方法,需要的朋友可以參考下

1.引用的基本用法

引用是C++對(duì)C的重要擴(kuò)充。在c/c++中,指針用法基本一致。但是C++增加了另一種給函數(shù)傳遞地址的途徑,這就是引用傳遞,也存在去其他語(yǔ)言,并不會(huì)是C++獨(dú)有。

1.1 引用的實(shí)質(zhì)

原類(lèi)型 &別名 = 舊名

1.2 引用的用法

注意事項(xiàng):

引用一旦初始化,不能更改引用的指向

引用定義時(shí)必須初始化 不能引用NULL

引用可以引用任意類(lèi)型包括數(shù)組

&在等號(hào)的左邊是引用,在等號(hào)的右邊是取地址

 代碼

#include <iostream>
using namespace std;
void test01()
{
	int a = 10;
	int& b = a;
	b = 100;
	cout << a << endl;
 
	int c = 1;
	//b = c; 代表把c的值賦值給b 不是給c取別名為b
	//int &d; 引用定義時(shí)必須初始化
}
 void test02()
 {
	int a[5] = { 1,2,3,4,5 };//int(&arr)[5] = a;
	 typedef int ARR[5];  //type & 別名 = 舊名
	 ARR & arr = a;
	 for (int i = 0; i < 5; i++)
	 {
		 cout << arr[i] << " ";
		
	  }
	 cout << endl;
	
 }
 int main()
{
	 test02();
	
	 return 0;
}

2.函數(shù)中的引用

引用可以作為函數(shù)的形參 ,不能返回局部變量的引用

在C語(yǔ)言中我們記得我們可以用指針解決函數(shù)不能交換值的問(wèn)題。

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

在C++中可以也使用引用很好的解決這個(gè)問(wèn)題

void swap_ref(int &x, int &y)// int &x =a, int &y =b
 {
   int tmp = x;
   x = y;
   y = tmp;
 
 }
 void test01_ref()
 {
   int a = 10; 
   int b = 20;
   swap_ref(a, b);
 }

如果想開(kāi)辟數(shù)組地址,用指針的做法是

//形參是指針 引用
void get_mem(int **q)
{
  *q = (int *)malloc(5 * sizeof(int));
}
void test03()
{
  int *p = NULL;
  get_mem(&p);
  get_mem_ref(p);
}

用引用可以這樣做

void get_mem_ref(int * &q)//int * (&q) = p
{
    q = (int *)malloc(5 * sizeof(int));
 
}
void test03()
{
  int *p = NULL;
  get_mem(&p);
  get_mem_ref(p);
}

能不能返回一個(gè)變量的引用 看這個(gè)變量的空間是否被釋放了

int & test04()
{
   //能不能返回一個(gè)變量的引用 看這個(gè)變量的空間是否被釋放了
   static int b = 100;
   int a = 10;
   //return a;//err 不能返回局部變量的引用
   return b;//可以返回靜態(tài)的變量的引用
 
 }

3.引用的本質(zhì)

引用的本質(zhì)是一個(gè)指針常量

type &b = a; 編譯器底層這么實(shí)現(xiàn)的: type *const b = &a

比如你寫(xiě)

int &b = a;  // 編譯器優(yōu)化為 int * const b = &a 

4.指針的引用

套用引用公式: type &q = p

如果想改變p的內(nèi)容,函數(shù)傳遞的時(shí)候按照指針的方法傳的是地址,如下:  get_mem(&p);

如果你想用引用的方法直接傳就行

void test03()
{
? int *p = NULL;
? get_mem(&p);
? get_mem_ref(p);
}

5.常量引用

const type &p = q;

常量引用代表不能通過(guò)引用去修改引用標(biāo)識(shí)的那塊空間

int a = 10; 
 
const int &b = a;

如果你再去  讓 b = 1000;就是錯(cuò)誤的 

雖然不能引用常量,但是可以加const來(lái)引用

int &b = 100; //不能引用常量

改為

const int &b = 1;

原理上是 等價(jià)于,相當(dāng)于讓tmp  = 1

int tmp =1 ,const int &b= tmp;

補(bǔ)充:引用和指針的區(qū)別(重要)

從底層匯編的角度來(lái)說(shuō),引用和指針是沒(méi)有區(qū)別的,都是以存地址的方式實(shí)現(xiàn)的(了解即可)

不同點(diǎn):

  1. 引用概念上是定義一個(gè)變量的別名,指針是存儲(chǔ)一個(gè)變量地址。
  2. 引用定義的時(shí)候必須初始化,而指針沒(méi)有要求。
  3. 引用在初始化一個(gè)實(shí)體后,就不能再引用其他實(shí)體,但指針可以在任何時(shí)候指向任何一個(gè)同類(lèi)型的實(shí)體。
  4. 沒(méi)有NULL引用,但有NULL指針。
  5. 引用比指針使用起來(lái)更安全
  6. 再sizeof中含義不同:引用結(jié)果為引用類(lèi)型的大小,但指針始終是地址空間所占字節(jié)個(gè)數(shù)(32位平臺(tái)下是4)
  7. 引用自加即引用的實(shí)體增加1,指針自加即指針向后偏移一個(gè)類(lèi)型的大小。
  8. 有多級(jí)指針,但沒(méi)有多級(jí)引用
  9. 訪問(wèn)實(shí)體方式不同,指針需要解引用,引用的話編譯器會(huì)自己處理。

總結(jié)

到此這篇關(guān)于C++中引用處理的文章就介紹到這了,更多相關(guān)C++引用處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你用c++從頭開(kāi)始實(shí)現(xiàn)決策樹(shù)

    教你用c++從頭開(kāi)始實(shí)現(xiàn)決策樹(shù)

    從頭實(shí)現(xiàn)一個(gè)分類(lèi)決策樹(shù)分類(lèi)器似乎是一個(gè)適當(dāng)?shù)奶魬?zhàn)。這已經(jīng)被證明是一個(gè)測(cè)試但有益的學(xué)習(xí)旅程,我想分享一些我在這個(gè)過(guò)程中的主要經(jīng)驗(yàn),對(duì)c++實(shí)現(xiàn)決策樹(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • c語(yǔ)言實(shí)現(xiàn)基數(shù)排序解析及代碼示例

    c語(yǔ)言實(shí)現(xiàn)基數(shù)排序解析及代碼示例

    這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)基數(shù)排序解析及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • C++獲取內(nèi)存使用情況小結(jié)

    C++獲取內(nèi)存使用情況小結(jié)

    在程序編程過(guò)程中,為了防止出現(xiàn)內(nèi)存泄漏情況出現(xiàn),需要持續(xù)關(guān)注內(nèi)存程序內(nèi)存占用情況,本文主要介紹了C++獲取內(nèi)存使用情況小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C++實(shí)現(xiàn)貪吃蛇游戲

    C++實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言版簡(jiǎn)單掃雷游戲

    C語(yǔ)言版簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 淺析c/c++中函數(shù)的參數(shù)傳遞

    淺析c/c++中函數(shù)的參數(shù)傳遞

    c/c++中,函數(shù)可以傳遞的參數(shù)有三種形式,值、引用和指針。以下分別對(duì)這三種形式進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • C語(yǔ)言中大小端問(wèn)題實(shí)例探索解決方法

    C語(yǔ)言中大小端問(wèn)題實(shí)例探索解決方法

    這篇文章主要介紹了C語(yǔ)言中大小端問(wèn)題實(shí)例,總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路
    2023-02-02
  • C++實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)最新版

    C++實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)最新版

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)最新版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++非遞歸建立二叉樹(shù)實(shí)例

    C++非遞歸建立二叉樹(shù)實(shí)例

    這篇文章主要介紹了C++非遞歸建立二叉樹(shù)的方法,實(shí)例分析了二叉樹(shù)的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    最近遇到一個(gè)問(wèn)題:數(shù)據(jù)庫(kù)中存放的時(shí)間為UTC時(shí)間,但是現(xiàn)在要求都出來(lái)顯示的時(shí)間為本地時(shí)間,所以就用C++實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間的方法,還有C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2017-11-11

最新評(píng)論