看板 C_and_CPP 關於我們 聯絡資訊
char, int, float 是型別,型別代表"大小",跟"格式";大小能 夠透過 sizeof(char) 來觀察,格式則由規格可知。先觀察一下 sizeof(char) 跟 sizeof(int) ,在32位元電腦上大多是 1 跟 4。 那麼指標呢? 32位元電腦裡面,指標通常都是 4bytes (32bits),因為他的值 是32位元定址空間裡面的某個位址。所以現在我們知道指向基礎 型別的指標大小一樣 (有多重繼承的話,member function pointer 不一定是4byte) 然而指向 char 的指標 char* 必須要知道他指向的是什麼型別 因為我們會做下面這樣的運算 char const *s = "abcd"; // 黃色部分是要注意的運算 cout<< s[2]; cout<< *(s + 2); 對指向 char 的 char* 來說 *(s+2) 或是 s[2] 是取得 "離 s 這個位址 2byte 遠" 的 char,2 byte 從哪邊來? 2 := 2 * sizeof(char) 現在來看看配置 int*: int *i = new int[2]; 這裡會配置 8 bytes 的記憶體然後把位址存在 i 裡面,因為 sizeof(int) * 2 = 8 跟 C 裡面 malloc 需要用到 sizeof 來取得單位大小是一樣的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.244.197
loveflames:曾碰過一個很奇怪的情形,sizeof(int)≠sizeof(int*) 10/26 17:01
james732:在64位元的系統 sizeof(int)=4≠sizeof(int*)=8 10/26 17:03
adxis:指標存的是位址喔 10/26 17:12
loveme00835:XD this 怎會有特例, 你是多加了 * 吧 10/26 17:15
adxis:會有的 你可以寫個有多重繼承的物件試試看 10/26 17:30
loveme00835:我還用了虛擬繼承, 可是沒有 @_@ 10/26 17:33
loveme00835:附上測試的程式碼 : http://codepad.org/6cMSPwU8 10/26 17:40
adxis:文章中間有個表格 10/26 17:40
littleshan:多重繼承的this和一般的pointer大小是一樣的 10/26 17:42
littleshan:但 member function pointer 多半比較大是真的 10/26 17:42
littleshan:那張表格講的是 member function pointer 10/26 17:45
adxis:啊! 抱歉抱歉 改一下 不是 this 0rz 10/26 17:45
※ 編輯: adxis 來自: 140.123.244.197 (10/26 17:46)
loveme00835:XDD 10/26 17:47
wa120:原PO有碰過array<char>^ 嗎orz 10/26 19:06
adxis:MSDN 找一下吧 那個是有 GC 的 C++ ,有包過 10/26 21:51