C 結構體中的引用和引用占用記憶體問題

2021-10-03 19:18:30 字數 1158 閱讀 2879

答:並不會,引用的底層實現其實是乙個指向相同變數的指標,但是套用乙個老哥的話

指標資訊是占用記憶體的,這部分記憶體是系統自動分配的,不需要你來操心它被放在**。通常我們說分配記憶體空間,是給你的變數內容使用的。你的變數可能是一串字元,一段文字,乙個數值。這些是真正需要你分配空間的地方。

就像賓館一樣,來了客人,開了房,就等於分配空間了。當然登記簿上是記了一筆,但是這個登記簿是由賓館來管理的。按照什麼格式,記了什麼東西是賓館管理方自己規定的。你住進房間了,人家給你登記為某先生。一開始別人來找你都問某先上在嗎?後來住長了服務員都知道你是某公司某總。那麼從他們從客人備註裡就寫上了這個資訊。今後一提某公司某總,就知道是你了。這就是引用。並沒給你新開房,就是給你加一別名,往本子裡記一筆而已。房間並沒有變動。

int a =1;

//給a分配記憶體 儲存1

int&b = a;

//不會給b分配記憶體,b指向的就是a那個記憶體

所以總結就是,宣告乙個新的引用,編譯器會分配乙個指標位址生成乙個指標,這個指標指向的是a,所以沒有對變數分配乙個新的記憶體,而是類似於建立了乙個新的指標

首先有如下的結構體,這裡我們以32位編譯器為例

struct test 

;

編譯結果為8,這說明編譯器在int&b = a;這一行生成了乙個4位元組的位址,但是我們知道乙個32位系統指標和int型別占用的記憶體大小都是4位元組,那麼這個4位元組到底表示的是指標還是乙個新的整型變數b呢?

如上第乙個問題所答,我們應該知道這個4位元組應該表示的是乙個指標,這裡我們來驗證一下

struct ab 

;int

main()

我們新加乙個double型別的指標,然後呼叫sizeof()對結構體ab求大小,編譯結果為12,這說明double& b確實是分配的乙個指標大小,而不是乙個新的double變數,如果分配的是新的double型別位址,那麼結果應該是16.

指標需要分配記憶體空間;引用不需要分配記憶體空間

指標是乙個變數,儲存的內容為乙個位址;引用是給乙個已有物件起的別名

指標是間接訪問,引用是直接訪問

新建乙個引用,編譯器並沒有給鏈結到的那個變數分配乙個新的記憶體儲存源變數的內容,而是分配乙個記憶體儲存指向源變數的指標罷了。

C 引用占用記憶體?

說到引用,一般c 的教材中都是這麼定義的 1,引用就是乙個物件的別名。2,引用不是值不佔記憶體空間。3,引用必須在定義時賦值,將變數與引用繫結。那你有沒有想過,上面的定義正確嗎?編譯器是如何解釋引用的?這裡先給出引用的本質定義,後面我們再進一步論證。1,引用實際是通過指標實現的。2,引用是乙個常量指...

C 結構體變數的引用 結構體變數引用

c 對結構體變數可以在定義時指定初始值。struct studentstudeng1 c 在定義了結構體變數以後,可以引用這個變數。可以將乙個結構體變數的值賦給另乙個具有相 同結構的結構體變數。student1 student2 可以引用乙個結構體變數中的乙個成員的值。student1.num 表示...

C語言中結構體 自引用 和 相互引用

technorati 標籤 c語言,結構體,自引用,相互引用,self reference,mutual reference 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含...