類的記憶體偏移

2021-07-04 16:16:57 字數 431 閱讀 3931

一道面試寶典中的題目,直接上**:

#include

using

namespace

std;

class a

void printa()

;class b

void printb()

;int main()

linux下g++執行的答案為:1;這裡牽涉到記憶體偏移的問題,物件a,b在記憶體中的存放內容為:ab

xzy

那為什麼沒有存放函式呢,物件中不會存放函式的相關資訊,因為函式時類的各個物件共有的,在執行語句pb->print(); 編譯器會為其找到相關的函。 對於結果為何為1,有上圖就可以知道,pb的型別為b*,但指向的卻是a的位址,因此pb->print()要輸出z時,在記憶體中找到的將是x,這樣輸出的結果就變成1了

C 如何獲取類成員的偏移

如何獲取類成員變數的移植,網上有個方法 struct a a 0 i 原理如下 a 0 的位址是0,所以 a 0 i的位址為 a 0 i減去0,即成員變數的位址。之所以可以這樣,是因為沒有記憶體的分配讀寫,這段 的計算在編譯時就完成,只要編譯不出錯就可以。最近檢視android的art runtim...

C C 記憶體偏移量學習筆記

這本來是上學期 課的課程實驗,一直都忘記把它寫下來。當時的實驗要求是用函式模板建立乙個函式可以對輸入的結構體的任一成員進行函式體的排序。我本身 學的也比較水,本來說既然確定了結構用個引數把需要進行排序的那一項傳進去做個判斷,乙個成員寫一串 也可以,不過這裡正好涉及到了以前學 時一直比較困惑的問題就是...

指標的偏移

方便演示,先初始化乙個指標為空。int a nullptr a a 1 1就偏移乙個單位,而a定義的是指向int型資料的指標,int型有4個位元組,所以輸出就是00000004 假設我們定義乙個一維陣列 int arr 5 int p arr 0 這裡也可以直接寫成arr p p 1 相當於p ar...