[初學C++]淺談C C++引用和指針的聯(lián)系和區(qū)別

為什么C/C++語言使用指針?

①一方面,每一種編程語言都使用指針册踩。不止C/C++使用指針。每一種編程語言都使用指針效拭。C++將指針暴露給了用戶(程序員)暂吉,而Java和C#等語言則將指針隱藏起來了。

“Everything uses pointers. C++ just exposes them rather than hiding them,”It's easier to give someone an address to your home than to give a copy of your home to everyone.

②另一方面使用指針的優(yōu)點和必要性:

  • 指針能夠有效的表示數(shù)據(jù)結(jié)構(gòu)缎患;
  • 能動態(tài)分配內(nèi)存慕的,實現(xiàn)內(nèi)存的自由管理;
  • 能較方便的使用字符串挤渔;
  • 便捷高效地使
  • 用數(shù)組指針直接與數(shù)據(jù)的儲存地址有關(guān)肮街,比如:值傳遞不如地址傳遞高效,因為值傳遞先從實參的地址中取出值判导,再賦值給形參代入函數(shù)計算嫉父;而指針則把形參的地址直接指向?qū)崊⒌刂罚褂脮r直接取出數(shù)據(jù)眼刃,效率提高绕辖,特別在頻繁賦值等情況下(注意:形參的改變會影響實參的值!)

引用和指針有什么區(qū)別擂红?

本質(zhì):引用是別名仪际,指針是地址,具體的:

①從現(xiàn)象上看昵骤,指針在運行時可以改變其所指向的值树碱,而引用一旦和某個對象綁定后就不再改變。這句話可以理解為:指針可以被重新賦值以指向另一個不同的對象涉茧。但是引用則總是指向在初始化時被指定的對象赴恨,以后不能改變,但是指定的對象其內(nèi)容可以改變伴栓。

②從內(nèi)存分配上看伦连,程序為指針變量分配內(nèi)存區(qū)域,而不為引用分配內(nèi)存區(qū)域钳垮,因為引用聲明時必須初始化惑淳,從而指向一個已經(jīng)存在的對象。引用不能指向空值饺窿。注:標準沒有規(guī)定引用要不要占用內(nèi)存歧焦,也沒有規(guī)定引用具體要怎么實現(xiàn),具體隨編譯器 http://bbs.csdn.net/topics/320095541

③從編譯上看,程序在編譯時分別將指針和引用添加到符號表上绢馍,符號表上記錄的是變量名及變量所對應地址向瓷。指針變量在符號表上對應的地址值為指針變量的地址值,而引用在符號表上對應的地址值為引用對象的地址值舰涌。符號表生成后就不會再改猖任,因此指針可以改變指向的對象(指針變量中的值可以改),而引用對象不能改瓷耙。這是使用指針不安全而使用引用安全的主要原因朱躺。從某種意義上來說引用可以被認為是不能改變的指針。

④不存在指向空值的引用這個事實搁痛,意味著使用引用的代碼效率比使用指針的要高长搀。因為在使用引用之前不需要測試它的合法性。相反鸡典,指針則應該總是被測試源请,防止其為空。

⑤理論上轿钠,對于指針的級數(shù)沒有限制巢钓,但是引用只能是一級病苗。如下: int** p1; // 合法疗垛。指向指針的指針 int& p2; // 合法。指向指針的引用 int& p3; // 非法硫朦。指向引用的指針是非法的 int&& p4; // 非法贷腕。指向引用的引用是非法的 注意上述讀法是從左到右。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咬展,一起剝皮案震驚了整個濱河市泽裳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌破婆,老刑警劉巖涮总,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異祷舀,居然都是意外死亡瀑梗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門裳扯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛丽,“玉大人,你說我怎么就攤上這事饰豺∫谙剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵冤吨,是天一觀的道長蒿柳。 經(jīng)常有香客問我饶套,道長,這世上最難降的妖魔是什么垒探? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任凤跑,我火速辦了婚禮,結(jié)果婚禮上叛复,老公的妹妹穿的比我還像新娘仔引。我一直安慰自己,他們只是感情好褐奥,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布咖耘。 她就那樣靜靜地躺著,像睡著了一般撬码。 火紅的嫁衣襯著肌膚如雪儿倒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天呜笑,我揣著相機與錄音夫否,去河邊找鬼。 笑死叫胁,一個胖子當著我的面吹牛凰慈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驼鹅,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼微谓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了输钩?” 一聲冷哼從身側(cè)響起豺型,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎买乃,沒想到半個月后姻氨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡剪验,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年肴焊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碉咆。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡抖韩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疫铜,到底是詐尸還是另有隱情茂浮,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站席揽,受9級特大地震影響顽馋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幌羞,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一寸谜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧属桦,春花似錦熊痴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至系谐,卻和暖如春巾陕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纪他。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工鄙煤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茶袒。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓梯刚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親弹谁。 傳聞我的和親對象是個殘疾皇子乾巧,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,103評論 1 32
  • 1.C和C++的區(qū)別句喜?C++的特性预愤?面向?qū)ο缶幊痰暮锰帲?答:c++在c的基礎(chǔ)上增添類,C是一個結(jié)構(gòu)化語言咳胃,它的重...
    杰倫哎呦哎呦閱讀 9,528評論 0 45
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型植康。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)展懈; ...
    朱森閱讀 3,446評論 3 44
  • 我在秋風里销睁, 找到遍地花。 煮上一壺茶存崖, 等你品小畫冻记。 ——無相《四季茶畫之煮秋》 PS:【四季茶畫】系無相創(chuàng)作的...
    蕭三閑閱讀 523評論 3 10