| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | AD | AE | AF | AG | AH | AI | AJ | AK | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ----------------------------使用說明-------------------------------------------------------------------------------- | Booker製作 | ||||||||||||||||||||||||||||||||||
2 | 一、為方便顯示,記憶體從右到左,從上至下排列,以符合數字呈現 | 記憶體視覺化V1.3 | ||||||||||||||||||||||||||||||||||
3 | 二、以64位元電腦為例。 | 更新日期:2021/3/27 | ||||||||||||||||||||||||||||||||||
4 | 三、1個位元Byte = 8bits(下面顯示的一排記憶體剛好等於一個Byte) | |||||||||||||||||||||||||||||||||||
5 | 四、int = 4Bytes = 32bits | |||||||||||||||||||||||||||||||||||
6 | 五、記憶體分配不可能都剛好給你整數的位置,以下範例純粹是方便示範,所以記憶體位置都是0或8結尾。 | |||||||||||||||||||||||||||||||||||
7 | 六、看到空格就自己補0吧 | |||||||||||||||||||||||||||||||||||
8 | ------------------------------------------------------------------------------------------------------------------------- | |||||||||||||||||||||||||||||||||||
9 | 取址 或指標 | 指標代表的記憶體位置 | 變數 | 16進位表示 | 0 | 0 | 假定最右側記憶體位置 (16進位) | sizeof(變數) | ||||||||||||||||||||||||||||
10 | 這個記憶體位置為0x0000 6e23 0075 0000------> | 0x0000 6e23 0075 0000 | ||||||||||||||||||||||||||||||||||
11 | 0x0000 6e23 0075 0001 | |||||||||||||||||||||||||||||||||||
12 | 2進位寫法等同於 | ff | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0002 | |||||||||||||||||||||||||
13 | 16進位寫法 | f | f | 0x0000 6e23 0075 0003 | ||||||||||||||||||||||||||||||||
14 | 0x0000 6e23 0075 0004 | |||||||||||||||||||||||||||||||||||
15 | 2進位寫法等同於 | 3d | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0x0000 6e23 0075 0005 | |||||||||||||||||||||||||
16 | 16進位寫法 | 3 | d | 0x0000 6e23 0075 0006 | ||||||||||||||||||||||||||||||||
17 | 一、首先宣告兩個變數 { int a = 5; int b = 65535; } | 0x0000 6e23 0075 0007 | ||||||||||||||||||||||||||||||||||
18 | 1 | 1 | 1 | 0x0000 6e23 0075 0008 | ||||||||||||||||||||||||||||||||
19 | 對a做取址得到記憶體第一個位置,因為point是8byte(32bits)的資料,會直接將所有資料讀出↓↓↓ | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0009 | ||||||||||||||||||||||||||||||
20 | 1 | 1 | 0x0000 6e23 0075 000A | |||||||||||||||||||||||||||||||||
21 | 0x0000 6e23 0075 000B | |||||||||||||||||||||||||||||||||||
22 | &a = | 0x0000 6e23 0075 000C | a | 0f | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0x0000 6e23 0075 000C | 4 | ||||||||||||||||||||||
23 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 000D | ||||||||||||||||||||||||||
24 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 000E | ||||||||||||||||||||||||||
25 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 000F | ||||||||||||||||||||||||||
26 | &b = | 0x0000 6e23 0075 0010 | b | ff | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0010 | 4 | ||||||||||||||||||||||
27 | ff | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0011 | ||||||||||||||||||||||||||
28 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0012 | ||||||||||||||||||||||||||
29 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0013 | ||||||||||||||||||||||||||
30 | 1 | 0x0000 6e23 0075 0014 | ||||||||||||||||||||||||||||||||||
31 | 1 | 1 | 0x0000 6e23 0075 0015 | |||||||||||||||||||||||||||||||||
32 | 1 | 0x0000 6e23 0075 0016 | ||||||||||||||||||||||||||||||||||
33 | 二、接著宣告一個陣列 int arr[3] = [1, 70000, 2*10^8]; | 0x0000 6e23 0075 0017 | ||||||||||||||||||||||||||||||||||
34 | 1 | 0x0000 6e23 0075 0018 | ||||||||||||||||||||||||||||||||||
35 | arr = &arr = &arr[0] = | 1 | 0x0000 6e23 0075 0019 | |||||||||||||||||||||||||||||||||
36 | 0x0000 6e23 0075 001B | arr[0] *arr | 01 | 1 | 0x0000 6e23 0075 001A | 4 | ||||||||||||||||||||||||||||||
37 | 00 | 0x0000 6e23 0075 001B | ||||||||||||||||||||||||||||||||||
38 | 00 | 0x0000 6e23 0075 001C | ||||||||||||||||||||||||||||||||||
39 | 00 | 0x0000 6e23 0075 001D | ||||||||||||||||||||||||||||||||||
40 | &arr[1] = | 0x0000 6e23 0075 001F | arr[1] *(arr+1) | 70 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 001E | 4 | ||||||||||||||||||||||
41 | 11 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0x0000 6e23 0075 001F | ||||||||||||||||||||||||||
42 | 00 | 0x0000 6e23 0075 0020 | ||||||||||||||||||||||||||||||||||
43 | 00 | 0x0000 6e23 0075 0021 | ||||||||||||||||||||||||||||||||||
44 | &arr[2] = | 0x0000 6e23 0075 0023 | arr[2] *(arr+2) | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0022 | 4 | ||||||||||||||||||||||
45 | C2 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x0000 6e23 0075 0023 | ||||||||||||||||||||||||||
46 | EB | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0024 | ||||||||||||||||||||||||||
47 | 0B | 1 | 0 | 1 | 1 | 0x0000 6e23 0075 0025 | ||||||||||||||||||||||||||||||
48 | 0x0000 6e23 0075 0026 | |||||||||||||||||||||||||||||||||||
49 | 1 | 1 | 0x0000 6e23 0075 0027 | |||||||||||||||||||||||||||||||||
50 | 三、接著宣告一個字元字串 char TEXT = “Hi”; | 0x0000 6e23 0075 0028 | ||||||||||||||||||||||||||||||||||
51 | 1 | 1 | 1 | 0x0000 6e23 0075 0029 | ||||||||||||||||||||||||||||||||
52 | 1 | 1 | 0x0000 6e23 0075 002A | |||||||||||||||||||||||||||||||||
53 | 字元 | 10進位 | 16進位 | 0x0000 6e23 0075 002B | ||||||||||||||||||||||||||||||||
54 | &TEXT = | 0x0000 6e23 0075 002C | TEXT[0] | H | 72 | 48 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0x0000 6e23 0075 002C | 3 | ||||||||||||||||||||
55 | TEXT[1] | i | 108 | 69 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0x0000 6e23 0075 002D | |||||||||||||||||||||||
56 | TEXT[2] | \0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 002E | |||||||||||||||||||||||
57 | 1 | 0x0000 6e23 0075 002F | ||||||||||||||||||||||||||||||||||
58 | 往右邊(T欄位)看電腦實際跑出來的結果做驗證 | 0x0000 6e23 0075 0030 | ||||||||||||||||||||||||||||||||||
59 | 1 | 1 | 0x0000 6e23 0075 0031 | |||||||||||||||||||||||||||||||||
60 | 1 | 0x0000 6e23 0075 0032 | ||||||||||||||||||||||||||||||||||
61 | 0x0000 6e23 0075 0033 | |||||||||||||||||||||||||||||||||||
62 | 可能會有未被清0的記憶體---> | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0034 | ||||||||||||||||||||||||||||||
63 | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0035 | |||||||||||||||||||||||||||||||
64 | 1 | 1 | 1 | 0x0000 6e23 0075 0036 | ||||||||||||||||||||||||||||||||
65 | 1 | 1 | 1 | 1 | 1 | 0x0000 6e23 0075 0037 | ||||||||||||||||||||||||||||||
66 | 1 | 1 | 1 | 0x0000 6e23 0075 0038 | ||||||||||||||||||||||||||||||||
67 | 0x0000 6e23 0075 0039 | |||||||||||||||||||||||||||||||||||
68 | 1 | 1 | 0x0000 6e23 0075 003A | |||||||||||||||||||||||||||||||||
69 | 1 | 0x0000 6e23 0075 003B | ||||||||||||||||||||||||||||||||||
70 | 四、宣告指標 { //int *指的是宣告型態為int的指標 int x = 5; int *ptr = &x; } | 0x0000 6e23 0075 003C | ||||||||||||||||||||||||||||||||||
71 | 0x0000 6e23 0075 003D | |||||||||||||||||||||||||||||||||||
72 | 0x0000 6e23 0075 003E | |||||||||||||||||||||||||||||||||||
73 | &ptr = | 0x0000 6e23 0075 003F | ptr | 0x0000 6e23 0075 004A | 4 | 0 | 0x0000 6e23 0075 003F | 8 | ||||||||||||||||||||||||||||
74 | 0 | 0 | 0x0000 6e23 0075 0040 | |||||||||||||||||||||||||||||||||
75 | sizeof(ptr) = | 8 Bytes = 32bits | 7 | 5 | 0x0000 6e23 0075 0041 | |||||||||||||||||||||||||||||||
76 | 0 | 0 | 0x0000 6e23 0075 0042 | |||||||||||||||||||||||||||||||||
77 | 2 | 3 | 0x0000 6e23 0075 0043 | |||||||||||||||||||||||||||||||||
78 | 6 | e | 0x0000 6e23 0075 0044 | |||||||||||||||||||||||||||||||||
79 | 0 | 0 | 0x0000 6e23 0075 0045 | |||||||||||||||||||||||||||||||||
80 | 0 | 0 | 0x0000 6e23 0075 0046 | |||||||||||||||||||||||||||||||||
81 | ptr = &x | 0x0000 6e23 0075 0047 | x | 0f | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0x0000 6e23 0075 0047 | 4 | ||||||||||||||||||||||
82 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0048 | ||||||||||||||||||||||||||
83 | sizeof(x) = | 4 Bytes = 16bits | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 0049 | ||||||||||||||||||||||||
84 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x0000 6e23 0075 004A | ||||||||||||||||||||||||||
85 | 0x0000 6e23 0075 004B | |||||||||||||||||||||||||||||||||||
86 | 1 | 0x0000 6e23 0075 004C | ||||||||||||||||||||||||||||||||||
87 | 1 | 0x0000 6e23 0075 004D | ||||||||||||||||||||||||||||||||||
88 | 0x0000 6e23 0075 004E | |||||||||||||||||||||||||||||||||||
89 | 這邊如果再宣告一個指標的指標 int **pptr = &ptr = &(&ptr) | 0x0000 6e23 0075 004F | ||||||||||||||||||||||||||||||||||
90 | 0x0000 6e23 0075 0050 | |||||||||||||||||||||||||||||||||||
91 | pptr = &ptr = | 0x0000 6e23 0075 0051 | ptr_ptr | 0x0000 6e23 0075 005D | 5 | 1 | 0x0000 6e23 0075 0051 | 也可以用*ptr的方式指向目標,來讀取資料,不過這邊就僅展示不多加說明 | ||||||||||||||||||||||||||||
92 | 0 | 0 | 0x0000 6e23 0075 0052 | |||||||||||||||||||||||||||||||||
93 | sizeof(ptr_ptr) = | 8 Bytes = 32bits | 7 | 5 | 0x0000 6e23 0075 0053 | |||||||||||||||||||||||||||||||
94 | 指標在64位元的記憶體,一定是8Bytes | 0 | 0 | 0x0000 6e23 0075 0054 | ||||||||||||||||||||||||||||||||
95 | 2 | 3 | 0x0000 6e23 0075 0055 | |||||||||||||||||||||||||||||||||
96 | 6 | e | 0x0000 6e23 0075 0056 | |||||||||||||||||||||||||||||||||
97 | 0 | 0 | 0x0000 6e23 0075 0057 | |||||||||||||||||||||||||||||||||
98 | 0 | 0 | 0x0000 6e23 0075 0058 | |||||||||||||||||||||||||||||||||
99 | 0x0000 6e23 0075 0059 | |||||||||||||||||||||||||||||||||||
100 | 五、宣告一個陣列指標 { int *array = calloc(3, sizeof(int)); array[0] = 5; array[1] = -1; array[2] = -5; } | 0x0000 6e23 0075 005A | ||||||||||||||||||||||||||||||||||