1. 程式人生 > >C++類物件成員變數和成員函式記憶體分配的問題

C++類物件成員變數和成員函式記憶體分配的問題

//類的使用//... K kTemp;
 printf("%d--%d\n",&kTemp,&kTemp.k);
 printf("%d--%d\n",sizeof(K),sizeof(kTemp.k));
 int *i = (int*)(&kTemp);
 int w = *i;
 printf("%d\n",w); 執行上面的程式碼,結果如下:1310588--1310588
4--4
12
很明顯,類的記憶體大小和其唯一的成員變數的記憶體大小是一致的。記憶體地址也是一致的。他們甚至可以相互轉換。換成結構體結果也是一樣。網友可以自己執行上面程式碼來進行確認。 這個時候,可能有人會提出疑問了。那麼成員函式又如何
?上面得程式碼就好像類沒有任何成員函式一樣,根本說明不了問題。 呵呵,所有的函式都是存放在程式碼區的,不管是全域性函式,還是成員函式。要是成員函式佔用類的物件空間,那麼將是多麼可怕的事情:定義一次類物件就有成員函式佔用一段空間。 我們再來補充一下靜態成員函式的存放問題吧:靜態成員函式與一般成員函式的唯一區別就是沒有this指標,因此不能訪問非靜態資料成員,就像我前面提到的,所有函式都存放在程式碼區,靜態函式也不例外。所有有人一看到 static 這個單詞就主觀的認為是存放在全域性資料區,那是不對的