Re: [問題] char* 在記憶體裡是長什麼樣子?
看板C_and_CPP (C/C++)作者adxis (Acquire higher)時間15年前 (2010/10/26 16:48)推噓6(6推 0噓 10→)留言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
10/26 17:01, 1F
→
10/26 17:03, , 2F
10/26 17:03, 2F
→
10/26 17:12, , 3F
10/26 17:12, 3F
→
10/26 17:15, , 4F
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
10/26 17:40, 7F
→
10/26 17:40, , 8F
10/26 17:40, 8F
→
10/26 17:40, , 9F
10/26 17:40, 9F
推
10/26 17:42, , 10F
10/26 17:42, 10F
→
10/26 17:42, , 11F
10/26 17:42, 11F
推
10/26 17:45, , 12F
10/26 17:45, 12F
→
10/26 17:45, , 13F
10/26 17:45, 13F
※ 編輯: adxis 來自: 140.123.244.197 (10/26 17:46)
推
10/26 17:47, , 14F
10/26 17:47, 14F
推
10/26 19:06, , 15F
10/26 19:06, 15F
→
10/26 21:51, , 16F
10/26 21:51, 16F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章