激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - c++中引用和指針的區(qū)別和聯(lián)系

c++中引用和指針的區(qū)別和聯(lián)系

2021-01-19 13:55C++教程網(wǎng) C/C++

許多人對于引用和指針的區(qū)別與聯(lián)系很糾結(jié)(包括我在內(nèi)O(∩_∩)O哈哈~),最近看到一篇關(guān)于引用和指針區(qū)別和聯(lián)系的文章,感覺茅塞頓開,在這里和大家分享下

C++中的引用和指針

相同點: 1. 都是地址的概念;
指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址;引用是某塊內(nèi)存的別名(java中的引用其實也是別名的意思)。

區(qū)別: 1. 指針是一個實體,而引用僅是個別名;
2. 引用使用時無需解引用(*),指針需要解引用;
3. 引用只能在定義時被初始化一次,之后不可變;指針可變; 引用“從一而終”
4. 引用沒有 const,指針有 const,const 的指針不可變;
5. 引用不能為空,指針可以為空;
6. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂?的大小;typeid(T) == typeid(T&) 恒為真,sizeof(T) == sizeof(T&) 恒為真,但是當引用作為成員時,其占用空間與指針相同(沒找到標準的規(guī)定)。
7. 指針和引用的自增(++)運算意義不一樣;

聯(lián)系
1. 引用在語言內(nèi)部用指針實現(xiàn)(如何實現(xiàn)?)。
2. 對一般應(yīng)用而言,把引用理解為指針,不會犯嚴重語義錯誤。引用是操作受限了的指針(僅容許取內(nèi)容操作)。
引用是C++中的概念,初學(xué)者容易把引用和指針混淆一起。一下程序中,n 是m 的一個引用(reference),m 是被引用物(referent)。

復(fù)制代碼 代碼如下:

int m;
int &n = m;

 

n 相當于m 的別名(綽號),對n 的任何操作就是對m 的操作。例如有人名叫王小毛,他的綽號是“三毛”。說“三毛”怎么怎么的,其實就是對王小毛說三道四。所以n 既不 是m 的拷貝,也不是指向m 的指針,其實n 就是m 它自己。

引用的一些規(guī)則如下:
(1)引用被創(chuàng)建的同時必須被初始化(指針則可以在任何時候被初始化)。
(2)不能有NULL 引用,引用必須與合法的存儲單元關(guān)聯(lián)(指針則可以是NULL)。
(3)一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時改變所指的對象)。
以下示例程序中,k 被初始化為i 的引用。語句k = j 并不能將k 修改成為j 的引用,只是把k 的值改變成為6。由于k 是i 的引用,所以i 的值也變成了6。

復(fù)制代碼 代碼如下:

int i = 5;
int j = 6;
int &k = i;
k = j; // k 和i 的值都變成了6;

 

上面的程序看起來象在玩文字游戲,沒有體現(xiàn)出引用的價值。引用的主要功能是傳遞函數(shù)的參數(shù)和返回值。C++語言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、 指針傳遞和引用傳遞。

以下是“值傳遞”的示例程序。由于Func1 函數(shù)體內(nèi)的x 是外部變量n 的一份拷貝,改變x 的值不會影響n, 所以n 的值仍然是0。

復(fù)制代碼 代碼如下:

void Func1(int x)
{
x = x + 10;
}
int n = 0;
Func1(n);
cout << “n = ” << n << endl;// n = 0

 

以下是“指針傳遞”的示例程序。由于Func2 函數(shù)體內(nèi)的x 是指向外部變量n 的指 針,改變該指針的內(nèi)容將導(dǎo)致n 的值改變,所以n 的值成為10。

復(fù)制代碼 代碼如下:

void Func2(int *x)
{
(* x) = (* x) + 10;
}
?
int n = 0;
Func2(&n);
cout << “n = ” << n << endl; // n = 10

 

以下是“引用傳遞”的示例程序。由于Func3 函數(shù)體內(nèi)的x 是外部變量n 的引用,x 和n 是同一個東西,改變x 等于改變n,所以n 的值成為10。

復(fù)制代碼 代碼如下:

void Func3(int &x)
{
x = x + 10;
}
?
int n = 0;
Func3(n);
cout << “n = ” << n << endl; // n = 10

 

對比上述三個示例程序,會發(fā)現(xiàn)“引用傳遞”的性質(zhì)象“指針傳遞”,而書寫方式象 “值傳遞”。實際上“引用”可以做的任何事情“指針”也都能夠做,為什么還要“引用” 這東西? 答案是“用適當?shù)墓ぞ咦銮∪缙浞值墓ぷ?rdquo;。 指針能夠毫無約束地操作內(nèi)存中的如何東西,盡管指針功能強大,但是非常危險。 就象一把刀,它可以用來砍樹、裁紙、修指甲、理發(fā)等等,誰敢這樣用? 如果的確只需要借用一下某個對象的“別名”,那么就用“引用”,而不要用“指針”, 以免發(fā)生意外。比如說,某人需要一份證明,本來在文件上蓋上公章的印子就行了,如 果把取公章的鑰匙交給他,那么他就獲得了不該有的權(quán)利。

注意:若定義string s1(“abc”);string * p=&s1;那么p值為s1的地址(即指針p內(nèi)的內(nèi)容),所以cout<<p1輸出值等于cout<<&s1,;p值為指針p所指地址內(nèi)存放的內(nèi)容,所以cout<<p等于abc;&p為指針p自己本身所在的地址,該地址內(nèi)存放的值為所指內(nèi)容的地址,cout<<&p等于指針p自身所在內(nèi)存的地址

可敲入如下代碼驗證:(并可驗證“引用不可變,指針可變”)

復(fù)制代碼 代碼如下:


#include<string>

 

#include<iostream>

#include<conio.h>

using namespace std;

void main()

{

string s1("Nancy");

string s2("Clancy");

string &rs=s1;

string *ps=&s1;

cout<<&rs<<" "<<ps<<"\n";

rs=s2;

ps=&s2;

cout<<rs<<" "<<*ps<<"\n";

cout<<&rs<<" "<<&s2<<" "<<ps<<" "<<&ps;
//引用rs的地址同之前相同,還是等于s1的地址,未發(fā)生改變,
//而指針ps的地址發(fā)生了改變,且指向了s2,引用rs內(nèi)的值和
//指針ps所指地址內(nèi)存放的值都變?yōu)榱藄2

_getch();


}

 

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現(xiàn)電腦關(guān)機程序

    C語言實現(xiàn)電腦關(guān)機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關(guān)機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 欧美在线成人影院 | 第四色成人网 | 午夜爽爽爽男女免费观看hd | 国产成人自拍av | 666sao| 免费a级黄色毛片 | 在线a毛片免费视频观看 | 中文字幕免费播放 | 黄色一级片毛片 | av中文字幕免费在线观看 | 看个毛片 | 黄色的视频免费看 | 精品国产一二区 | 美女毛片在线观看 | 国产精品视频在 | lutube成人福利在线观看 | 欧美日韩国产成人在线 | 一级黄色在线免费观看 | 激情亚洲一区二区三区 | 国产精品一区二区手机在线观看 | 国产精品观看在线亚洲人成网 | 国产亚色 | 欧美精品成人一区二区三区四区 | 成人短视频在线观看免费 | 国产精品一 | 黄色高清视频网站 | 国产免费一区 | 黄色免费大片 | 九九热九九爱 | 性少妇videosexfreexx | 在线播放中文 | 九九热精品免费 | 亚洲第一视频在线 | 成人资源在线 | 激情欧美在线 | 久久噜噜噜 | 一级免费在线视频 | 俄罗斯16一20sex牲色另类 | 成人毛片在线免费看 | 久久网站热最新地址4 | 成人黄色短视频在线观看 |