指針和引用在C + +第2部分
繼續與這種企圖系列篇有關指針和引用,開始談論指針 ,引用今天討論。
一個引用是一個別名為對象,一個別名。 此外,誰說這不是我,而是很比雅尼斯特魯普 ,圍繞他的主題5.5 書 ,其內容是太好,我只看到現在的封面有一個破波的形式正 我喜歡那個封面!
聲明引用
一個引用到特定類型宣布追加字符 &(與符號或符號 )後的名稱類型的參考。 請注意,同樣的方式在宣言中的指針,我們是治療和字符作為一個等級,而不是經營者。 有一個經營者申報的指針或引用。 這只是一個符號的語言。 由於是T型,表現手法電訊參考。 例如:
/ /聲明一個整數變量的原始。 / /它也可以煤焦,浮動等。 詮釋 我; / /聲明引用變量島 / /所有形式是等價的,但更喜歡第一個。 / /注意引用的類型必須相同 / /該變量的引用。 ra = i ; 詮釋 及嶺= 我; rb = i ; 詮釋包=& 我; rc = i ; 詮釋 及鋼筋混凝土= 我; / /指針不同,線下生成一個 / /編譯錯誤。 你可以知道為什麼? r1, & r2 ; 詮釋 與 R1的, 與 R2的;
而在C + +引用提醒一些指針,它們有很大的不同。 會發生什麼不同的指針,引用必須初始化在其聲明。 要聲明一個引用沒有初始化它生成一個錯誤在編譯時,編譯器即會在你臉上吐唾沫“失落的花花公子丟失。” 唯一的例外是參考聲明為外部 ,因為它們將被初始化指向任何其他的方案,但這是另一次談話。
如果您嘗試欺騙申報外部參考不初始化它的編譯器將不會抱怨。 如果是從未使用過,確定。 如果編譯器是聰明,注意它不會被使用,它甚至可以從列表中刪除它的符號。 但如果是在任何地方使用該程序,鏈接器會笑你的臉,笑:“未定義的參考'nome_da_variavel'。” 所以,做事情的權利。 聲明一個引用? 因此iniclalize它。 外部? 你確定你知道自己在做什麼?
這背後的邏輯是,一提到計劃是一個名稱的東西。 如果你不開機,它不會為任何名稱,然後它的意義。 一個非常重要的細節是開始, 不是一個引用賦值給它。 由於 prório比亞說,沒有經營者經營上的提述,即有沒有辦法分配,加,減等與參考。 作為參考是一個別名為對象,每個運營商的行為內謝對象,而不是在參考。 一旦初始化,參考始終引用同一個對象。
第一個陷阱與引用,以及指針是問題的大小。 雖然大小的指針(及其他數據結構),可與 sizeof運算符,大小的參考不能獲得常規技術,由於採用 sizeof運算符時的一個統計,我們實際上是在申請經營的對象引用它,因為我們看到在前面的段落。
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 焦炭 權證; 詮釋 我; 杜布勒D; rc = c ; 焦炭 及鋼筋混凝土= C的 ; ri = i ; 詮釋 與裡= 我; rd = d ; = D的 雙 和路; / / sizeof運算符說,大小類型的參數。 "Size of char: " << sizeof ( c ) << " bytes" << endl ; 法院 “”“大小的字符 :”<<大小 (三 )<<“字節”<< 恩德; "Size of int: " << sizeof ( i ) << " bytes" << endl ; 法院 “”“大小的詮釋 :”<<大小 (一 )<<“字節”<< 恩德; "Size of double: " << sizeof ( d ) << " bytes" << endl ; 法院 “”“大小雙 :”<<大小 (四 )<<“字節”<< 恩德; endl ; 法院 <<恩德; "Size of char&: " << sizeof ( rc ) << " bytes" << endl ; 法院 “”“大小的字符及 :”<<大小 (區局 )<<“字節”<< 恩德; "Size of int&: " << sizeof ( ri ) << " bytes" << endl ; 法院 “”“大小的詮釋及 :”<<大小 (裡 )<<“字節”<< 恩德; "Size of double&: " << sizeof ( rd ) << " bytes" << endl ; 法院 “”“雙和大小:”<< 大小 (次 )<<“字節”<< 恩德; |
該技術獲得的大小的引用都超出了本文的範圍,但我打算稍後談論。 現在,我只說沒有顯示出,在適用情況下,大小的參考是相同的大小的一個指針。
好部分的故事是,往往是大小的指針和引用有關遠不比大小的物體指出或轉介。 我從來沒有特別需要使用該信息,但對發展或在不同的體系結構的嵌入式系統,它已經變得更加有趣。
使用參考資料
使用引用比現在更簡單的指針,因為經營者,無須提取地址或取消引用。 變量的引用被用作普通的變量,並指出上執行的操作參考總是影響對象引用。
17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 詮釋的x,y; rx = x ; 詮釋 與接收= 十; ry = y ; Ry的詮釋 &= Ÿ; ; x = 13; ;為y = 10; ; // A atribuição é automaticamente aplicada em x.接收= 42 / /自動適用的轉讓到x // O incremento é automaticamente aplicado em y. Ry的+ + / /增量自動應用到Y "x: " << x << endl ; // Valor de x. 法院 “”“謝:”<<x <<恩德 / / x的值 "y: " << y << endl ; // Valor de y. 法院 “”“Ÿ:”<<Ÿ <<恩德 / / y的價值 "rx: " << rx << endl ; // Valor de rx == x. 法院 “”“處方:”<<處方<<恩德 / / x的值接收== "ry: " << ry << endl ; // Valor de ry == y. 法院 “”“Ry的:”<<Ry的<<恩德 / / y的價值Ry的== |
利用職權為透明的程序員,他並不需要知道這是一個參考。 只要使用像一個普通的變量。 用我有限的想像力實在看不出有人可以驅逐使用條款不當。 雖然總是有一些精神豬糞便與誰可以做參考,更容易得到絆倒由薩西處理指針。
地址和引用
從立場, 墨菲 ,被引用的是醜陋,無聊和愚蠢的,因為很少有潛在危害的不關己。 即使有許多驚喜的地址(會?)。 考慮下面的代碼:
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 10 ; 詮釋 1 = 10; 13 ; 詮釋 b = 13; ra = a ; 詮釋 及嶺= 1; rb = b ; 詮釋 及包= B的 ; ;嶺= 42; ;包= 7; "ra = " << ra << endl ; // O valor de ra == 42. 法院 “”“嶺=”<<嶺<<恩德 / /的值嶺== 42。 "rb = " << rb << endl ; // O valor de rb == 7. 法院 “”“包=”<<包<<恩德 / /包的價值== 7。 "a = " << a << endl ; // O valor de a == ra == 42. 法院 “”“1 =”<<1 <<恩德 / /值對嶺== == 42。 "b = " << b << endl ; // O valor de b == rb == 7. 法院 “”“b =”<<b <<恩德 / / b的值包== == 7。 "&a = " << & a << endl ; // O endereço de a. 法院 “”“&1 =”<<&1 <<恩德 / / a的地址 "&b = " << & b << endl ; // O endereço de b. 法院 “”“和B =”<< 和B <<恩德 / / B的地址 "&ra = " << & ra << endl ; // O endereço de ra == &a. 法院 “”“&嶺=”<<&嶺<<恩德 / /的地址嶺==&答 "&rb = " << & rb << endl ; // O endereço de rb == &b. 法院 “”“&包=”<<&包<<恩德 / /包的地址==&灣 |
17:18我就行聲明兩個整數變量(可以這樣做一個例子...). 論線 20:21我宣布兩個引用,它引用了前兩個變量。 此後的變量RA與RB只是別名變量A和B 正如我們前面所看到的,任何運營商應用到實際運作上的參考引用的對象,所以每對可變參考始終具有相同的值。
有趣的部分要注意的是,解決了引用是完全一樣的地址的變量,他們參考,不像指針,有自己的地址。 為什麼? 因為你下降Pegadinha做Malandro 。 請記住,談論任何運營商應用到參考? 嗯,這裡使用的是與運營商的“地址”,也適用於直接對原變量而不是在引用。 用同樣的方法得到的大小忍者的引用都必須取得他們的地址。
同樣有趣的部分是參考機制被設計為盡可能透明的程序員。 尺寸和物理地址的引用是不相關的信息從角度的'正常'程序在C + +。
之間的差異和相似之處指針和引用
這兩個指針和引用是間接機制在C + +,或所使用的機制,從一個給定的符號(變量)我將能夠操縱另一個對象。
其主要用途為指針,一般與管理和操作的動態內存,創建和銷毀對象的不同形狀和特殊的時刻,以及“通過引用傳遞參數”(所以引用它)。 引用已經被用於通過引用傳遞(為什麼?)和操作符重載。
基本上,我們只能做參考,可仿效的指針。 已經相互並非總是如此。 他們的巨大優勢,但是,就是間接成為完全透明的程序員。
一個有趣的寓言,以幫助人們更好地理解指針和引用的區別是暱稱。 例如:假設一個人,說, 鄧加 ,是我們的原始變量,該對象。 鄧加已經是一個參考鄧加,因為它是一個別名為相同的對象是同一個人。 已是母親的鄧加(或鄧加,等等),只要是所列舉的人群,可以被認為是指向它的指針,因為某些數據運營商的詞彙,使她的讚美,其實是間接的目標他。
鏈接
- referencias.zip (所有來源的職位);
- 01 - declaracao.cpp
- 02 - tamanhos.cpp
- 03 - utilizando.cpp
- 04 - enderecos.cpp
- 有罪
評論
- 胡扯
- 布魯諾
- 豪爾赫佩雷拉
- Wanderley Caloni
- Wanderley Caloni
- 胡扯


