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

2021-08-16 11:06:58 字數 2749 閱讀 8411

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語言中引用怎樣理解

引用 reference 是c 對c語言的重要擴充。一 引用的概念 引用引入了物件的一個同義詞。定義引用的表示方法與定義指標相似,只是用 代替了 例如 point pt1 10,10 point pt2 pt1 定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一物件。需要特別強調的是...

c中解構函式中可以呼叫虛擬函式麼

c 中 析構 函式中不可以呼叫虛擬函式。effective c 中有這樣的描述 同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c 就將它們視為不再存在。c 中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類...

C裡是不是不用引用呼叫就不能改變實參的值

你的 感bai覺 一點都不錯 du不用引用zhi就改變不了實參。使用指標dao說改版變了實參只是種誤會,指標權 本身仍是拷貝,改變不了實參指標的內容 但可以通過指標來改變指標指向的目標 這和通過形參改變實參不是一回事 你舉的copy例子也是不可能的 通過指標拷貝可以改變目標值是指標的作用,通過形參拷...