C 的引用呼叫中是否可以理解為取地址符

2021-08-16 11:06:57 字數 2749 閱讀 8119

1樓:it散人

引用呼叫是把變數的地址傳進去,函式內對引用的操作就是對函式外部變數的操作。

指標呼叫其實是把指標變數又拷貝了一份給函式,只有在函式內部修改指標所指向的值才會對起外部指標產生影響,你要是把傳進來的指標的地址變了,對函式外面指標指向的值沒有影響。

引用和指標不要混淆了,這個你寫個測試程式測測吧

2樓:匿名使用者

引用一般就是一個指標,它指向一個實體的實體記憶體。通常c#中除了值型別的物件之外所有的物件都是引用型別。也就是說當你呼叫一個引用型別的物件的時候,它會將自己指向的地址傳遞給你,然後根據地址去做你想做的事情。

例如: object obj = new object();

obj = new object();

上面這個語句中,object obj的意思就是建立一個object型別的引用型別物件obj,其實這個obj只是一個指標,系統會在記憶體中建立一個物件堆疊專門存放這種指標。而new object()做的是在記憶體中開闢一塊記憶體空間實際存放一個物件。然後 = 號將指標obj指向由new object()開闢的這個記憶體控制元件。

第二個語句中又使用了new object()建立了一個新的object型別的記憶體控制元件,這個空間是全新的,然後又將obj的指標指向了新的這個記憶體。在這裡 obj物件就是一個引用其實就是一個指標。

呼叫是一個動作,是物件與物件之間互動的時候,互相做的動作。因此引用和呼叫不是同一類東西。一般來說當一個類使用到本類或者其他類內部的物件、欄位、事件、方法、屬性等的時候就叫呼叫,相當於將別人的東西拿過來用。

例如:public class a

}public class b

}上面這個例子中在b的operation方法中建立了一個a物件,然後a.seta(),就是一次呼叫的動作。

記住呼叫永遠都是一個動作,而引用只是一個指標。這裡要明確一點"呼叫"是一個動詞,而"引用"你要理解成一個名次它等與"指標"。這樣就可以了。

3樓:_鈊_煩_薏亂

引用在其實現上其實就是動用了指標。

不過我還是希望你不要把引用和指標混淆,因為這樣對你不好。

4樓:匿名使用者

好像引用作函式引數的時候確實是直接傳遞變數地址的

c++中引用操作符與取址操作符怎麼是一樣的?都是「&」。怎麼理解它們呢?

5樓:匿名使用者

「&」,當用在定義變數時,在表示式左邊時表示是引用操作符,其他情況是取地內

址。引用就相當於是容對指標的一個延伸,避免了使用指標而帶來的就隱性危險。但是,它在本質上跟指標是不 同的。

不過指標雖然危險,但只要用的好,是非常強大的。而引用功能就單一的多嘍。具體,你可以看下引用與指標的定義,這些資料網上有很多。

關於c++引用形參的問題。引用符號&是不是和c中的取地址符號一個意思呢?

6樓:匿名使用者

當然不是一個意思,只是30年前剛出現c++的時候選擇了這個符號而已,不要有這種無必要的聯想

請問c++中的引用符號「&」到底怎麼使用?

7樓:匿名使用者

按照 c 語言比較優雅的「宣告模仿使用」規則:

int foo; // foo 是 int,所以 foo 的型別是 intint *foo; // *foo 是 int,所以 foo 的型別是 int 指標int foo[42]; // foo[42] 是 int,所以 foo 的型別是 int 陣列int foo(); // foo() 是 int,所以 foo 的型別是返回 int 的函式

那麼 c++ 的「引用」呢:

int ?foo?; // 怎樣的「?foo? 是 int」,才能讓 foo 是一個對 int 的引用呢?

按照「宣告模仿使用」的規則,我們應該參考「如何使用引用」,但是坑爹的是,int 引用的用法實際上和 int 沒什麼兩樣:

int foo;int& ref = foo;foo = 4; // 使用 intref = 2; // 使用 int 引用

所以理論上,如果按照 c 語言的規則,引用的宣告方法應該是:

int ref; // error: 瞎子都看得出來的歧義

所以,c 語言的傳統宣告規則已經沒法解決 c++ 的引用該如何宣告的問題了。此時問題就變成了:如何在儘可能遵守 c 語言規則的前提下,把 c++ 的引用宣告出來?

那麼回到 c 語言,你會發現:

a pointer type may be derived from a function type, an object type, or an incomplete

type, called the referenced type. a pointer type describes an object whose value

provides a reference to an entity of the referenced type.

以上引用自 c99 §6.2.5/20,歌詞大意是:

可以從若干中型別中推匯出「指標型別」,指標型別所指向的型別稱作「被引用型別」。指標型別的作用為「提供被引用型別物件的引用」。你看,c 語言裡也有「引用」的概念,這也是為什麼我們常把「*p」讀作「將 p 解除引用」。

有了這樣的背景情報,既然 * 是「解除引用」,那麼用來取地址的 & 就可以理解為「進行引用」。所以,如果一定要從 c 語言的資產中找一個符號來區分「int」和「int 引用」,那麼最直觀的顯然是 & 無誤了。

c中的引用符號的問題,請問C中的引用符號到底怎麼使用

這是引用的一個bai容易出du錯的地方,引用是一種複合型別zhi,呼叫上面函式的dao正確形式應內該為 xx bool變數名 呼叫容函式時,編譯器會這樣理解來傳值 bool b c bool變數名 你用常量的話,問題就來了,常量是不佔記憶體的,變數b c又怎麼和它共用一片空間呢?試試下面形式,boo...

請問c 中的引用符號到底怎麼使用

c 中的引用符號 的使用方法是,型別識別符號 引用名 目標變數名。c 是c語言的繼承,它可進行過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。引用 reference 就是c 對c語言的重要擴充。引用就是某一變數 目標 的一個別名...

c 函式怎麼呼叫另函式中的引數

如來果另一個函式中的引數源是該函式bai的動態區域性變數,那是du不可能的,除非想zhi點其他辦法,比dao如說跟蹤該區域性變數生成的地址,並且在該區域性變數的生存期內呼叫。但是這樣我不知道有什麼意義。如果另一個函式中的引數的變數是函式的區域性靜態變數static,那麼也可以,不過得想點辦法。那就是...