指針與引用

指針

指針是一個變量,只不過這個變量存儲的是一個地址,指向內(nèi)存的一個存儲單元。

引用

引用跟原來的變量實質(zhì)上是同一個東西逾一,只不過是原變量的一個別名而已。(教科書標準)

指針與引用的區(qū)別

  • 引用不可以為空肮雨,當被創(chuàng)建的時候遵堵,必須初始化,而指針可以是空值怨规,可以在任何時候被初始化
  • 有const指針陌宿,但是沒有const引用
  • 指針的值可以為空,但是引用的值不能為空波丰,并且引用在定義的時候必須初始化
  • 指針的值在初始化后可以改變限番,即指向其它的存儲單元,而引用在進行初始化后就不會再改變
  • sizeof 引用得到的是所指向的變量(對象)的大小呀舔,而sizeof pointer”得到的是指針本身的大小弥虐,在64位機器下為8字節(jié)
  • 指針可以有多級扩灯,但是引用只能是一級
  • 如果返回動態(tài)內(nèi)存分配的對象或者內(nèi)存,必須使用指針霜瘪,引用可能引起內(nèi)存泄漏
  • 指針和引用的自增(++)運算意義不一樣

函數(shù)傳參

指針傳參數(shù)

演示代碼如下珠插,編譯g++ main.c -o main -std=c++11

#include <iostream>
#include "stdio.h"
using namespace std;
void swap(int *a, int *b) {
    int *tmp = a;
    a = b;
    b = tmp;
}
void testp(int *p) {
    int c = 5;
    p = &c;
    cout << p << " " << *p << endl;
}
int main(int argc, char** argv) {
    int a = 1, b = 2;
    swap(&a,&b);
    cout << a << " " << b << endl;

    int *p = nullptr;
    testp(p);
    if (p == nullptr)
        cout << "p is nullptr" << endl;
    else
        cout << p << " " << *p << endl;

    return 0;
}

編譯運行之后的結果:


image.png

可以觀察到的結果:

  1. swap函數(shù)沒有交換a,b的值
  2. testp函數(shù)中指針p是地址颖对,*p取到了變量c的值
  3. testp函數(shù)沒有返回后沒有改變傳入的指針參數(shù)p
引用傳參數(shù)
#include <iostream>
#include "stdio.h"
using namespace std;
void testp(int &p) {
    cout << &p << " " << p << endl;
    p = 5;
    cout << &p << " " << p << endl;
}
int main(int argc, char** argv) {
    int p = 1;
    cout << &p << " " << p << endl;
    testp(p);
    return 0;
}

可以看到結果:

  1. 變量P三次地址都沒有改變
  2. 變量P的值在函數(shù)testp中最后一次改變了

運行如下:


image.png

引用實質(zhì)

我們知道在C語言中無法使用引用傳參數(shù)捻撑,引用傳參數(shù)是C++的語法。那么C語言中如何實現(xiàn)類似的功能呢缤底?

#include "stdio.h"
void swap(int *const a, int *const b) {
     int tmp = *a;
     *a = *b;
     *b = tmp;
}
int main(int argc, char** argv) {
    int x=10,y=20;
    swap(&x,&y);
    printf("%d %d\n", x, y);
    return 0;
}

如上代碼就是C語言中的實現(xiàn)顾患,同樣也能實現(xiàn)x,y的值交換个唧,只不過函數(shù)傳的參數(shù)是int *const類型江解。
實際上,在引用中int &b=a這一句代碼可被編譯器看做int * const b=&a徙歼,加上const的作用是表明指針b的自身的值(a的地址)不能改變犁河,而指向的值(a的值)可以改變。也就是說引用相當于指針魄梯,引用與指針在編譯時的方法一樣桨螺,指向的都是變量的內(nèi)存地址。但是也有一些不同點如下:

  1. 在定義方式中引用儲存的是值酿秸,而指針是一個變量的拷貝灭翔,存儲的是地址
  2. 引用只能對已經(jīng)存在的變量或?qū)ο髮崿F(xiàn)引用,而指針則不需要辣苏,可以定義為空
  3. 在函數(shù)的傳參中缠局,如果傳遞的是一個引用,意味著這個變量或?qū)ο笠呀?jīng)存在了考润;如果傳遞的是一個指針,則不能判斷這個指針是不是有效的读处,是不是空的糊治,因此在函數(shù)體 中大多數(shù)都得進行指針是否為空的判斷。但是雖然引用較為安全罚舱,但是利用指針來傳參效率較快
  4. 引用是直接訪問變量井辜,不用分配自己的內(nèi)存空間,而指針是間接訪問管闷,需要定義粥脚,需要有自己的內(nèi)存空間

所以實際開發(fā)中,使用哪種方式應該由開發(fā)者自己來定包个,按照開發(fā)的需求來定刷允。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冤留,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子树灶,更是在濱河造成了極大的恐慌纤怒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件天通,死亡現(xiàn)場離奇詭異泊窘,居然都是意外死亡,警方通過查閱死者的電腦和手機像寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門烘豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诺祸,你說我怎么就攤上這事携悯。” “怎么了序臂?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵蚌卤,是天一觀的道長。 經(jīng)常有香客問我奥秆,道長逊彭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任构订,我火速辦了婚禮侮叮,結果婚禮上,老公的妹妹穿的比我還像新娘悼瘾。我一直安慰自己囊榜,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布亥宿。 她就那樣靜靜地躺著卸勺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烫扼。 梳的紋絲不亂的頭發(fā)上曙求,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音映企,去河邊找鬼悟狱。 笑死,一個胖子當著我的面吹牛堰氓,可吹牛的內(nèi)容都是我干的挤渐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼双絮,長吁一口氣:“原來是場噩夢啊……” “哼浴麻!你這毒婦竟也來了得问?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤白胀,失蹤者是張志新(化名)和其女友劉穎椭赋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體或杠,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡哪怔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了向抢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片认境。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挟鸠,靈堂內(nèi)的尸體忽然破棺而出叉信,到底是詐尸還是另有隱情,我是刑警寧澤艘希,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布硼身,位于F島的核電站,受9級特大地震影響覆享,放射性物質(zhì)發(fā)生泄漏佳遂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一撒顿、第九天 我趴在偏房一處隱蔽的房頂上張望丑罪。 院中可真熱鬧,春花似錦凤壁、人聲如沸吩屹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤搜。三九已至,卻和暖如春唧席,著一層夾襖步出監(jiān)牢的瞬間擦盾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工袱吆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人距淫。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓绞绒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榕暇。 傳聞我的和親對象是個殘疾皇子蓬衡,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容