Re: [問題] char* 在記憶體裡是長什麼樣子?

看板C_and_CPP (C/C++)作者 (Acquire higher)時間15年前 (2010/10/26 16:48), 編輯推噓6(6010)
留言16則, 6人參與, 最新討論串2/2 (看更多)
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

10/26 17:01, , 1F
曾碰過一個很奇怪的情形,sizeof(int)≠sizeof(int*)
10/26 17:01, 1F

10/26 17:03, , 2F
在64位元的系統 sizeof(int)=4≠sizeof(int*)=8
10/26 17:03, 2F

10/26 17:12, , 3F
指標存的是位址喔
10/26 17:12, 3F

10/26 17:15, , 4F
XD this 怎會有特例, 你是多加了 * 吧
10/26 17:15, 4F

10/26 17:30, , 5F
會有的 你可以寫個有多重繼承的物件試試看
10/26 17:30, 5F

10/26 17:33, , 6F
我還用了虛擬繼承, 可是沒有 @_@
10/26 17:33, 6F

10/26 17:40, , 7F
附上測試的程式碼 : http://codepad.org/6cMSPwU8
10/26 17:40, 7F

10/26 17:40, , 9F
文章中間有個表格
10/26 17:40, 9F

10/26 17:42, , 10F
多重繼承的this和一般的pointer大小是一樣的
10/26 17:42, 10F

10/26 17:42, , 11F
但 member function pointer 多半比較大是真的
10/26 17:42, 11F

10/26 17:45, , 12F
那張表格講的是 member function pointer
10/26 17:45, 12F

10/26 17:45, , 13F
啊! 抱歉抱歉 改一下 不是 this 0rz
10/26 17:45, 13F
※ 編輯: adxis 來自: 140.123.244.197 (10/26 17:46)

10/26 17:47, , 14F
XDD
10/26 17:47, 14F

10/26 19:06, , 15F
原PO有碰過array<char>^ 嗎orz
10/26 19:06, 15F

10/26 21:51, , 16F
MSDN 找一下吧 那個是有 GC 的 C++ ,有包過
10/26 21:51, 16F
文章代碼(AID): #1CnfNaCt (C_and_CPP)
文章代碼(AID): #1CnfNaCt (C_and_CPP)